From 9436598e7a217518ff00d81ea1dbf6904a3ac430 Mon Sep 17 00:00:00 2001 From: Allyson English <58833140+Allyson-English@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:26:29 -0600 Subject: [PATCH] SI-2471-burn-vehicle (#271) * burn vehicle endpoints * rename mint_request_id to transaction_request_id * add burn req id column to vehicle nft table --------- Co-authored-by: Kevin Joiner <10265309+KevinJoiner@users.noreply.github.com> --- cmd/devices-api/api.go | 4 + docs/docs.go | 1607 ++++++++++++++--- docs/swagger.json | 1600 +++++++++++++--- docs/swagger.yaml | 1145 ++++++++++-- go.mod | 24 +- go.sum | 382 +--- internal/controllers/nft_controller.go | 206 +++ internal/controllers/nft_controller_test.go | 120 ++ .../controllers/user_devices_controller.go | 37 +- .../user_devices_controller_test.go | 60 +- .../user_integrations_controller.go | 1 - internal/services/autopi_api_service_test.go | 2 +- .../services/contracts_events_consumer.go | 54 +- .../contracts_events_consumer_test.go | 131 ++ internal/services/registry/client.go | 36 + internal/services/registry/storage.go | 3 + ...0240305100739_rename_col_vnft_mint_req.sql | 20 + models/meta_transaction_requests.go | 212 +++ models/vehicle_nfts.go | 225 ++- 19 files changed, 4846 insertions(+), 1023 deletions(-) create mode 100644 migrations/20240305100739_rename_col_vnft_mint_req.sql diff --git a/cmd/devices-api/api.go b/cmd/devices-api/api.go index a26a216ca..6ebe0f9e3 100644 --- a/cmd/devices-api/api.go +++ b/cmd/devices-api/api.go @@ -211,6 +211,10 @@ func startWebAPI(logger zerolog.Logger, settings *config.Settings, pdb db.Store, vehicleAddr := common.HexToAddress(settings.VehicleNFTAddress) + // vehicle token actions + vPriv.Get("/commands/burn", userDeviceController.GetBurnDevice) + vPriv.Post("/commands/burn", userDeviceController.PostBurnDevice) + // vehicle command privileges vPriv.Get("/status", privTokenWare.OneOf(vehicleAddr, []privileges.Privilege{privileges.VehicleNonLocationData, privileges.VehicleCurrentLocation, privileges.VehicleAllTimeLocation}), nftController.GetVehicleStatus) diff --git a/docs/docs.go b/docs/docs.go index e81fc87a6..a569d8fdd 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,5 +1,6 @@ -// Code generated by swaggo/swag at 2024-02-27 17:18:44.130124 -0500 EST m=+1.896616959. DO NOT EDIT. - +// Package docs GENERATED BY SWAG; DO NOT EDIT +// This file was generated by swaggo/swag at +// 2024-03-19 12:07:34.37237 -0600 MDT m=+1.886394792 package docs import "github.com/swaggo/swag" @@ -198,7 +199,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.AutoPiTask" + "$ref": "#/definitions/services.AutoPiTask" } } } @@ -276,7 +277,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo" + "$ref": "#/definitions/constants.CountryInfo" } } } @@ -304,7 +305,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo" + "$ref": "#/definitions/constants.CountryInfo" } }, "400": { @@ -753,7 +754,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDevice" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice" } } ], @@ -761,7 +762,7 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceResponse" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse" } } } @@ -979,7 +980,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceSmartcar" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar" } } ], @@ -987,13 +988,13 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "400": { @@ -1038,7 +1039,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceVIN" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN" } } ], @@ -1046,7 +1047,7 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "400": { @@ -1079,7 +1080,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.MyDevicesResp" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp" } } } @@ -1103,7 +1104,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.MyDevicesResp" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp" } } } @@ -1189,7 +1190,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.MintRequest" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MintRequest" } } ], @@ -1284,7 +1285,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateCountryCodeReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq" } } ], @@ -1325,7 +1326,7 @@ const docTemplate = `{ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1368,7 +1369,7 @@ const docTemplate = `{ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1395,13 +1396,13 @@ const docTemplate = `{ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } }, "429": { "description": "Last query already cleared", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1824,7 +1825,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateNameReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq" } }, { @@ -1860,7 +1861,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceOffer" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer" } } } @@ -1893,7 +1894,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceRange" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange" } } } @@ -1959,7 +1960,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceValuation" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation" } } } @@ -1989,7 +1990,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateVINReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq" } }, { @@ -2032,7 +2033,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.NFTImageData" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData" } } ], @@ -2066,7 +2067,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/internal_controllers.GetGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence" } } } @@ -2098,7 +2099,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.CreateGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence" } } ], @@ -2106,7 +2107,7 @@ const docTemplate = `{ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse" + "$ref": "#/definitions/helpers.CreateResponse" } } } @@ -2146,7 +2147,7 @@ const docTemplate = `{ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.CreateGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence" } } ], @@ -2185,6 +2186,70 @@ const docTemplate = `{ } } }, + "/vehicle/:tokenID/commands/burn": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns the data the user must sign in order to burn the device.", + "tags": [ + "user-devices" + ], + "parameters": [ + { + "type": "integer", + "description": "token id", + "name": "tokenID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apitypes.TypedData" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Sends a burn device request to the blockchain", + "tags": [ + "user-devices" + ], + "parameters": [ + { + "type": "integer", + "description": "token id", + "name": "tokenID", + "in": "path", + "required": true + }, + { + "description": "Signature and Token ID", + "name": "burnRequest", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/internal_controllers.BurnRequest" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, "/vehicle/{tokenID}/commands/doors/lock": { "post": { "description": "Lock the device's doors.", @@ -2503,7 +2568,7 @@ const docTemplate = `{ "big.Int": { "type": "object" }, - "github_com_DIMO-Network_devices-api_internal_constants.CountryInfo": { + "constants.CountryInfo": { "type": "object", "properties": { "alpha_2": { @@ -2532,269 +2597,1082 @@ const docTemplate = `{ } } }, - "github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiClaimRequest": { "type": "object", "properties": { - "id": { + "aftermarketDeviceSignature": { + "description": "AftermarketDeviceSignature is the signature from the aftermarket device.", "type": "string" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes": { - "type": "object", - "properties": { - "code": { - "type": "integer" }, - "message": { + "userSignature": { + "description": "UserSignature is the signature from the user, using their private key.", "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.AutoPiTask": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiDeviceInfo": { "type": "object", "properties": { - "code": { - "type": "integer" - }, - "description": { - "type": "string" - }, - "error": { - "type": "string" - }, - "status": { - "type": "string" + "beneficiaryAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", + "type": "array", + "items": { + "type": "integer" + } }, - "taskId": { - "type": "string" + "claim": { + "description": "Claim contains the status of the on-chain claiming meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" }, - "updatedAt": { + "deviceId": { "type": "string" }, - "updates": { - "description": "Updates increments every time the job was updated.", - "type": "integer" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute": { - "type": "object", - "properties": { - "name": { - "type": "string" + "dockerReleases": { + "type": "array", + "items": { + "type": "integer" + } }, - "value": { - "type": "string" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility": { - "type": "object", - "properties": { - "capabilities": { + "ethereumAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" } }, - "country": { + "hwRevision": { "type": "string" }, - "id": { - "type": "string" + "isUpdated": { + "type": "boolean" }, - "region": { + "lastCommunication": { "type": "string" }, - "style": { + "manufacturer": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo" + }, + "ownerAddress": { "type": "string" }, - "type": { + "pair": { + "description": "Pair contains the status of the on-chain pairing meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" + }, + "releaseVersion": { "type": "string" }, - "vendor": { + "shouldUpdate": { + "type": "boolean" + }, + "template": { + "type": "integer" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + }, + "unitId": { "type": "string" + }, + "unpair": { + "description": "Unpair contains the status of the on-chain unpairing meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiPairRequest": { "type": "object", "properties": { - "compatibleIntegrations": { - "description": "CompatibleIntegrations has systems this vehicle can integrate with", + "aftermarketDeviceSignature": { + "description": "AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of\nthe pairing payload by the device. Only needed if the vehicle owner and aftermarket\ndevice owner are not the same.", "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility" + "type": "integer" } }, - "deviceAttributes": { - "description": "DeviceAttributes is a list of attributes for the device type as defined in device_types.properties", + "externalId": { + "type": "string" + }, + "signature": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute" + "type": "integer" } - }, - "deviceDefinitionId": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "make": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceMake" - }, - "metadata": {}, - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceType" - }, - "vehicleData": { - "description": "VehicleInfo will be empty if not a vehicle type", - "allOf": [ - { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo" - } - ] - }, - "verified": { - "type": "boolean" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceMake": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus": { "type": "object", "properties": { - "id": { - "type": "string" + "createdAt": { + "description": "CreatedAt is the timestamp of the creation of the meta-transaction.", + "type": "string", + "example": "2022-10-01T09:22:21.002Z" }, - "logo_url": { - "type": "string" + "hash": { + "description": "Hash is the hexidecimal transaction hash, available for any transaction at the Submitted stage or greater.", + "type": "string", + "example": "0x28b4662f1e1b15083261a4a5077664f4003d58cb528826b7aab7fad466c28e70" }, - "name": { - "type": "string" + "status": { + "description": "Status is the state of the transaction performing this operation. There are only four options.", + "type": "string", + "enum": [ + "Unsubmitted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Mined" }, - "oem_platform_name": { - "type": "string" + "updatedAt": { + "description": "UpdatedAt is the last time we updated the status of the transaction.", + "type": "string", + "example": "2022-10-01T09:22:26.337Z" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceType": { + "github.com_DIMO-Network_devices-api_internal_controllers.BurnRequest": { "type": "object", + "required": [ + "signature" + ], "properties": { - "make": { - "type": "string" - }, - "model": { - "type": "string" - }, - "subModels": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type is eg. Vehicle, E-bike, roomba", + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", "type": "string" }, - "year": { - "type": "integer" + "tokenId": { + "$ref": "#/definitions/big.Int" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo": { + "github.com_DIMO-Network_devices-api_internal_controllers.BurnSyntheticDeviceRequest": { "type": "object", "properties": { - "base_msrp": { - "type": "integer" - }, - "driven_wheels": { + "signature": { "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CommandRequestStatusResp": { + "type": "object", + "properties": { + "command": { + "type": "string", + "example": "doors/unlock" }, - "epa_class": { - "type": "string" + "createdAt": { + "type": "string", + "example": "2022-08-09T19:38:39Z" }, - "fuel_tank_capacity_gal": { + "id": { + "type": "string", + "example": "2D8LqUHQtaMHH6LYPqznmJMBeZm" + }, + "status": { + "type": "string", + "enum": [ + "Pending", + "Complete", + "Failed" + ], + "example": "Complete" + }, + "updatedAt": { + "type": "string", + "example": "2022-08-09T19:39:22Z" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CommandResponse": { + "type": "object", + "properties": { + "requestId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeRequest": { + "type": "object", + "properties": { + "authorizationCode": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "region": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse": { + "type": "object", + "properties": { + "definition": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition" + }, + "externalId": { + "type": "string" + }, + "vin": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponseWrapper": { + "type": "object", + "properties": { + "vehicles": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence": { + "type": "object", + "properties": { + "h3Indexes": { + "description": "required: false", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "required: true", + "type": "string" + }, + "type": { + "description": "one of following: \"PrivacyFence\", \"TriggerEntry\", \"TriggerExit\"\nrequired: true", + "type": "string" + }, + "userDeviceIds": { + "description": "Optionally link the geofence with a list of user device ID", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer": { + "type": "object", + "properties": { + "offerSets": { + "description": "Contains a list of offer sets, one for each source", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.OfferSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange": { + "type": "object", + "properties": { + "rangeSets": { + "description": "Contains a list of range sets, one for each range basis (may be empty)", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RangeSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceSnapshot": { + "type": "object", + "properties": { + "ambientTemp": { + "type": "number" + }, + "batteryCapacity": { + "type": "integer" + }, + "batteryVoltage": { + "type": "number" + }, + "chargeLimit": { + "type": "number" + }, + "charging": { + "type": "boolean" + }, + "fuelPercentRemaining": { + "type": "number" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "odometer": { + "type": "number" + }, + "oil": { + "type": "number" + }, + "range": { + "type": "number" + }, + "recordCreatedAt": { + "type": "string" + }, + "recordUpdatedAt": { + "type": "string" + }, + "soc": { + "type": "number" + }, + "tirePressure": { + "$ref": "#/definitions/smartcar.TirePressure" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation": { + "type": "object", + "properties": { + "valuationSets": { + "description": "Contains a list of valuation sets, one for each vendor", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DocumentResponse": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice": { + "type": "object", + "properties": { + "mmy": { + "type": "string" + }, + "name": { + "type": "string" + }, + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "h3Indexes": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "userDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponse": { + "type": "object", + "properties": { + "queries": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem": { + "type": "object", + "properties": { + "clearedAt": { + "description": "ClearedAt is the time at which the user cleared the codes from this query.\nMay be null.", + "type": "string", + "example": "2023-05-23T12:57:05Z" + }, + "errorCodes": { + "type": "array", + "items": { + "$ref": "#/definitions/services.ErrorCodesResponse" + } + }, + "requestedAt": { + "type": "string", + "example": "2023-05-23T12:56:36Z" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceIntegrationResponse": { + "type": "object", + "properties": { + "createdAt": { + "description": "CreatedAt is the creation time of this integration for this device.", + "type": "string" + }, + "externalId": { + "description": "ExternalID is the identifier used by the third party for the device. It may be absent if we\nhaven't authorized yet.", + "type": "string" + }, + "status": { + "description": "Status is one of \"Pending\", \"PendingFirstData\", \"Active\", \"Failed\", \"DuplicateIntegration\".", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MintRequest": { + "type": "object", + "required": [ + "imageData", + "signature" + ], + "properties": { + "imageData": { + "description": "ImageData contains the base64-encoded NFT PNG image.", + "type": "string" + }, + "imageDataTransparent": { + "description": "ImageDataTransparent contains the base64-encoded NFT PNG image\nwith a transparent background, for use in the app. For compatibility\nwith older versions it is not required.", + "type": "string" + }, + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MintSyntheticDeviceRequest": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "example": "0xc565d38982e1a5004efb5ee390fba0a08bb5e72b3f3e91094c66bc395c324f785425d58d5c1a601372d9c16164e380c63e89f1e0ea95fdefdf7b2854c4f938e81b" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp": { + "type": "object", + "properties": { + "sharedDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" + } + }, + "userDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute": { + "type": "object", + "properties": { + "trait_type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTData": { + "type": "object", + "properties": { + "ownerAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", + "type": "array", + "items": { + "type": "integer" + } + }, + "status": { + "description": "Status is the minting status of the NFT.", + "type": "string", + "enum": [ + "Unstarted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Confirmed" + }, + "tokenId": { + "type": "number", + "example": 37 + }, + "tokenUri": { + "type": "string", + "example": "https://nft.dimo.zone/37" + }, + "txHash": { + "description": "TxHash is the hash of the minting transaction.", + "type": "string", + "example": "0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData": { + "type": "object", + "required": [ + "imageData" + ], + "properties": { + "imageData": { + "description": "ImageData contains the base64-encoded NFT PNG image.", + "type": "string" + }, + "imageDataTransparent": { + "description": "ImageDataTransparent contains the base64-encoded NFT PNG image\nwith a transparent background, for use in the app. For compatibility\nwith older versions it is not required.", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTMetadataResp": { + "type": "object", + "properties": { + "attributes": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute" + } + }, + "description": { + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.Offer": { + "type": "object", + "properties": { + "declineReason": { + "description": "The reason the offer was declined from the vendor", + "type": "string" + }, + "error": { + "description": "An error from the vendor (eg. when the VIN is invalid)", + "type": "string" + }, + "grade": { + "description": "The grade of the offer from the vendor (eg. \"RETAIL\")", + "type": "string" + }, + "price": { + "description": "The offer price from the vendor", + "type": "integer" + }, + "url": { + "description": "The offer URL from the vendor", + "type": "string" + }, + "vendor": { + "description": "The vendor of the offer (eg. \"carmax\", \"carvana\", etc.)", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.OfferSet": { + "type": "object", + "properties": { + "mileage": { + "description": "The mileage used for the offers", + "type": "integer" + }, + "offers": { + "description": "Contains a list of offers from the source", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Offer" + } + }, + "source": { + "description": "The source of the offers (eg. \"drivly\")", + "type": "string" + }, + "updated": { + "description": "The time the offers were pulled", + "type": "string" + }, + "zipCode": { + "description": "This will be the zip code used (if any) for the offers request regardless if the source uses it", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.Privilege": { + "type": "object", + "properties": { + "expiry": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "updatedAt": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "privileges": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Privilege" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesReq": { + "type": "object", + "properties": { + "errorCodes": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "P0106", + "P0279" + ] + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesResponse": { + "type": "object", + "properties": { + "clearedAt": { + "type": "string" + }, + "errorCodes": { + "type": "array", + "items": { + "$ref": "#/definitions/services.ErrorCodesResponse" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RangeSet": { + "type": "object", + "properties": { + "rangeBasis": { + "description": "The basis for the range calculation (eg. \"MPG\" or \"MPG Highway\")", + "type": "string" + }, + "rangeDistance": { + "description": "The estimated range distance", + "type": "integer" + }, + "rangeUnit": { + "description": "The unit used for the rangeDistance (eg. \"miles\" or \"kilometers\")", + "type": "string" + }, + "updated": { + "description": "The time the data was collected", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterDeviceIntegrationRequest": { + "type": "object", + "properties": { + "accessToken": { + "type": "string" + }, + "code": { + "description": "Code is an OAuth authorization code. Not used in all integrations.", + "type": "string" + }, + "expiresIn": { + "type": "integer" + }, + "externalId": { + "description": "ExternalID is the only field needed for AutoPi registrations. It is the UnitID.", + "type": "string" + }, + "redirectURI": { + "description": "RedirectURI is the OAuth redirect URI used by the frontend. Not used in all integrations.", + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "version": { + "type": "integer" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice": { + "type": "object", + "properties": { + "countryCode": { + "type": "string" + }, + "deviceDefinitionId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse": { + "type": "object", + "properties": { + "deviceDefinitionId": { "type": "string" }, - "fuel_type": { - "type": "string" + "integrationCapabilities": { + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceCompatibility" + } }, - "mpg": { + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar": { + "type": "object", + "properties": { + "code": { + "description": "Code refers to the auth code provided by smartcar when user logs in", "type": "string" }, - "mpg_city": { + "countryCode": { "type": "string" }, - "mpg_highway": { + "redirectURI": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN": { + "type": "object", + "properties": { + "canProtocol": { + "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", "type": "string" }, - "number_of_doors": { + "countryCode": { "type": "string" }, - "vehicle_type": { - "description": "VehicleType PASSENGER CAR, from NHTSA", + "vin": { "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse": { + "github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus": { "type": "object", "properties": { - "code": { + "address": { "type": "string", - "example": "P0148" + "example": "0xAED7EA8035eEc47E657B34eF5D020c7005487443" }, - "description": { + "status": { "type": "string", - "example": "Fuel delivery error" + "enum": [ + "Unstarted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Confirmed" + }, + "tokenId": { + "type": "number", + "example": 15 + }, + "txHash": { + "type": "string", + "example": "0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq": { + "type": "object", + "properties": { + "countryCode": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq": { + "type": "object", + "properties": { + "name": { + "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.PowertrainType": { - "type": "string", - "enum": [ - "ICE", - "HEV", - "PHEV", - "BEV", - "FCEV" + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq": { + "type": "object", + "required": [ + "vin" ], - "x-enum-varnames": [ - "ICE", - "HEV", - "PHEV", - "BEV", - "FCEV" - ] + "properties": { + "signature": { + "description": "Signature is the hex-encoded result of the AutoPi signing the VIN. It must\nbe present to verify the VIN.", + "type": "string", + "example": "16b15f88bbd2e0a22d1d0084b8b7080f2003ea83eab1a00f80d8c18446c9c1b6224f17aa09eaf167717ca4f355bb6dc94356e037edf3adf6735a86fc3741f5231b" + }, + "vin": { + "description": "VIN is a vehicle identification number. At the very least, it must be\n17 characters in length and contain only letters and numbers.", + "type": "string", + "example": "4Y1SL65848Z411439" + } + } }, - "github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata": { + "github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull": { "type": "object", "properties": { - "canProtocol": { - "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", + "countryCode": { "type": "string" }, - "elasticDefinitionSynced": { + "customImageUrl": { + "type": "string" + }, + "deviceDefinition": { + "$ref": "#/definitions/services.DeviceDefinition" + }, + "id": { + "type": "string" + }, + "integrations": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus" + } + }, + "metadata": { + "$ref": "#/definitions/services.UserDeviceMetadata" + }, + "name": { + "type": "string" + }, + "nft": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTData" + }, + "optedInAt": { + "type": "string" + }, + "privilegedUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser" + } + }, + "vin": { + "type": "string" + }, + "vinConfirmed": { "type": "boolean" }, - "elasticRegionSynced": { + "vinCredential": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "externalId": { + "type": "string" + }, + "integrationId": { + "type": "string" + }, + "integrationVendor": { + "type": "string" + }, + "metadata": { + "type": "string" + }, + "status": { + "type": "string" + }, + "syntheticDevice": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + }, + "updatedAt": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData": { + "type": "object", + "properties": { + "expiresAt": { + "type": "string" + }, + "issuedAt": { + "type": "string" + }, + "valid": { "type": "boolean" }, - "geoDecodedCountry": { + "vin": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet": { + "type": "object", + "properties": { + "currency": { + "description": "eg. USD or EUR", "type": "string" }, - "geoDecodedStateProv": { + "mileage": { + "description": "The mileage used for the valuation", + "type": "integer" + }, + "odometer": { + "type": "integer" + }, + "odometerUnit": { "type": "string" }, - "postal_code": { + "retail": { + "description": "retail is equal to retailAverage when available", + "type": "integer" + }, + "retailAverage": { + "type": "integer" + }, + "retailClean": { + "description": "retailClean, retailAverage, and retailRough my not always be available", + "type": "integer" + }, + "retailRough": { + "type": "integer" + }, + "retailSource": { + "description": "Useful when Drivly returns multiple vendors and we've selected one (eg. \"drivly:blackbook\")", "type": "string" }, - "powertrainType": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.PowertrainType" + "tradeIn": { + "description": "tradeIn is equal to tradeInAverage when available", + "type": "integer" + }, + "tradeInAverage": { + "type": "integer" + }, + "tradeInClean": { + "description": "tradeInClean, tradeInAverage, and tradeInRough my not always be available", + "type": "integer" + }, + "tradeInRough": { + "type": "integer" + }, + "tradeInSource": { + "description": "Useful when Drivly returns multiple vendors and we've selected one (eg. \"drivly:blackbook\")", + "type": "string" + }, + "updated": { + "description": "The time the valuation was pulled or in the case of blackbook, this may be the event time of the device odometer which was used for the valuation", + "type": "string" + }, + "userDisplayPrice": { + "description": "UserDisplayPrice the top level value to show to users in mobile app", + "type": "integer" + }, + "vendor": { + "description": "The source of the valuation (eg. \"drivly\" or \"blackbook\")", + "type": "string" + }, + "zipCode": { + "description": "This will be the zip code used (if any) for the valuation request regardless if the vendor uses it", + "type": "string" } } }, @@ -2834,20 +3712,39 @@ const docTemplate = `{ } } }, - "grpc.Integration_AutoPiPowertrainTemplate": { + "grpc.Integration_AutoPiPowertrainTemplate": { + "type": "object", + "properties": { + "BEV": { + "type": "integer" + }, + "HEV": { + "type": "integer" + }, + "ICE": { + "type": "integer" + }, + "PHEV": { + "type": "integer" + } + } + }, + "helpers.CreateResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "helpers.ErrorRes": { "type": "object", "properties": { - "BEV": { - "type": "integer" - }, - "HEV": { - "type": "integer" - }, - "ICE": { + "code": { "type": "integer" }, - "PHEV": { - "type": "integer" + "message": { + "type": "string" } } }, @@ -2868,6 +3765,7 @@ const docTemplate = `{ "type": "object", "properties": { "beneficiaryAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" @@ -2875,11 +3773,7 @@ const docTemplate = `{ }, "claim": { "description": "Claim contains the status of the on-chain claiming meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" }, "deviceId": { "type": "string" @@ -2891,6 +3785,7 @@ const docTemplate = `{ } }, "ethereumAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" @@ -2913,11 +3808,7 @@ const docTemplate = `{ }, "pair": { "description": "Pair contains the status of the on-chain pairing meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" }, "releaseVersion": { "type": "string" @@ -2936,11 +3827,7 @@ const docTemplate = `{ }, "unpair": { "description": "Unpair contains the status of the on-chain unpairing meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" } } }, @@ -2958,6 +3845,7 @@ const docTemplate = `{ "type": "string" }, "signature": { + "description": "AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of\nthe pairing payload by the device. Only needed if the vehicle owner and aftermarket\ndevice owner are not the same.", "type": "array", "items": { "type": "integer" @@ -2996,6 +3884,21 @@ const docTemplate = `{ } } }, + "internal_controllers.BurnRequest": { + "type": "object", + "required": [ + "signature" + ], + "properties": { + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", + "type": "string" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + } + } + }, "internal_controllers.BurnSyntheticDeviceRequest": { "type": "object", "properties": { @@ -3227,7 +4130,7 @@ const docTemplate = `{ "type": "string" }, "type": { - "$ref": "#/definitions/internal_controllers.DocumentTypeEnum" + "type": "string" }, "url": { "type": "string" @@ -3237,27 +4140,6 @@ const docTemplate = `{ } } }, - "internal_controllers.DocumentTypeEnum": { - "type": "string", - "enum": [ - "DriversLicense", - "Other", - "VehicleTitle", - "VehicleRegistration", - "VehicleInsurance", - "VehicleMaintenance", - "VehicleCustomImage" - ], - "x-enum-varnames": [ - "DriversLicense", - "Other", - "VehicleTitle", - "VehicleRegistration", - "VehicleInsurance", - "VehicleMaintenance", - "VehicleCustomImage" - ] - }, "internal_controllers.GeoFenceUserDevice": { "type": "object", "properties": { @@ -3326,7 +4208,7 @@ const docTemplate = `{ "errorCodes": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse" + "$ref": "#/definitions/services.ErrorCodesResponse" } }, "requestedAt": { @@ -3602,7 +4484,7 @@ const docTemplate = `{ "errorCodes": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse" + "$ref": "#/definitions/services.ErrorCodesResponse" } } } @@ -3677,7 +4559,7 @@ const docTemplate = `{ "integrationCapabilities": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility" + "$ref": "#/definitions/services.DeviceCompatibility" } }, "userDeviceId": { @@ -3786,7 +4668,7 @@ const docTemplate = `{ "type": "string" }, "deviceDefinition": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition" + "$ref": "#/definitions/services.DeviceDefinition" }, "id": { "type": "string" @@ -3798,7 +4680,7 @@ const docTemplate = `{ } }, "metadata": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata" + "$ref": "#/definitions/services.UserDeviceMetadata" }, "name": { "type": "string" @@ -3949,6 +4831,232 @@ const docTemplate = `{ "math.HexOrDecimal256": { "type": "object" }, + "services.AutoPiTask": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taskId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updates": { + "description": "Updates increments every time the job was updated.", + "type": "integer" + } + } + }, + "services.DeviceAttribute": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "services.DeviceCompatibility": { + "type": "object", + "properties": { + "capabilities": { + "type": "array", + "items": { + "type": "integer" + } + }, + "country": { + "type": "string" + }, + "id": { + "type": "string" + }, + "region": { + "type": "string" + }, + "style": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vendor": { + "type": "string" + } + } + }, + "services.DeviceDefinition": { + "type": "object", + "properties": { + "compatibleIntegrations": { + "description": "CompatibleIntegrations has systems this vehicle can integrate with", + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceCompatibility" + } + }, + "deviceAttributes": { + "description": "DeviceAttributes is a list of attributes for the device type as defined in device_types.properties", + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceAttribute" + } + }, + "deviceDefinitionId": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "make": { + "$ref": "#/definitions/services.DeviceMake" + }, + "metadata": {}, + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/services.DeviceType" + }, + "vehicleData": { + "description": "VehicleInfo will be empty if not a vehicle type", + "$ref": "#/definitions/services.DeviceVehicleInfo" + }, + "verified": { + "type": "boolean" + } + } + }, + "services.DeviceMake": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "oem_platform_name": { + "type": "string" + } + } + }, + "services.DeviceType": { + "type": "object", + "properties": { + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "subModels": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type is eg. Vehicle, E-bike, roomba", + "type": "string" + }, + "year": { + "type": "integer" + } + } + }, + "services.DeviceVehicleInfo": { + "type": "object", + "properties": { + "base_msrp": { + "type": "integer" + }, + "driven_wheels": { + "type": "string" + }, + "epa_class": { + "type": "string" + }, + "fuel_tank_capacity_gal": { + "type": "string" + }, + "fuel_type": { + "type": "string" + }, + "mpg": { + "type": "string" + }, + "mpg_city": { + "type": "string" + }, + "mpg_highway": { + "type": "string" + }, + "number_of_doors": { + "type": "string" + }, + "vehicle_type": { + "description": "VehicleType PASSENGER CAR, from NHTSA", + "type": "string" + } + } + }, + "services.ErrorCodesResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "P0148" + }, + "description": { + "type": "string", + "example": "Fuel delivery error" + } + } + }, + "services.UserDeviceMetadata": { + "type": "object", + "properties": { + "canProtocol": { + "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", + "type": "string" + }, + "elasticDefinitionSynced": { + "type": "boolean" + }, + "elasticRegionSynced": { + "type": "boolean" + }, + "geoDecodedCountry": { + "type": "string" + }, + "geoDecodedStateProv": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "powertrainType": { + "type": "string" + } + } + }, "smartcar.TirePressure": { "type": "object", "properties": { @@ -3975,20 +5083,9 @@ const docTemplate = `{ "type": "string" }, "unitSystem": { - "$ref": "#/definitions/smartcar.UnitSystem" + "type": "string" } } - }, - "smartcar.UnitSystem": { - "type": "string", - "enum": [ - "metric", - "imperial" - ], - "x-enum-varnames": [ - "Metric", - "Imperial" - ] } }, "securityDefinitions": { @@ -4010,8 +5107,6 @@ var SwaggerInfo = &swag.Spec{ Description: "", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, - LeftDelim: "{{", - RightDelim: "}}", } func init() { diff --git a/docs/swagger.json b/docs/swagger.json index c1f5b9750..e9fef945a 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -189,7 +189,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.AutoPiTask" + "$ref": "#/definitions/services.AutoPiTask" } } } @@ -267,7 +267,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo" + "$ref": "#/definitions/constants.CountryInfo" } } } @@ -295,7 +295,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo" + "$ref": "#/definitions/constants.CountryInfo" } }, "400": { @@ -744,7 +744,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDevice" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice" } } ], @@ -752,7 +752,7 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceResponse" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse" } } } @@ -970,7 +970,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceSmartcar" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar" } } ], @@ -978,13 +978,13 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "400": { @@ -1029,7 +1029,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.RegisterUserDeviceVIN" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN" } } ], @@ -1037,7 +1037,7 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/internal_controllers.UserDeviceFull" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" } }, "400": { @@ -1070,7 +1070,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.MyDevicesResp" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp" } } } @@ -1094,7 +1094,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.MyDevicesResp" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp" } } } @@ -1180,7 +1180,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.MintRequest" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MintRequest" } } ], @@ -1275,7 +1275,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateCountryCodeReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq" } } ], @@ -1316,7 +1316,7 @@ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1359,7 +1359,7 @@ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1386,13 +1386,13 @@ "404": { "description": "Vehicle not found", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } }, "429": { "description": "Last query already cleared", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes" + "$ref": "#/definitions/helpers.ErrorRes" } } } @@ -1815,7 +1815,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateNameReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq" } }, { @@ -1851,7 +1851,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceOffer" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer" } } } @@ -1884,7 +1884,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceRange" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange" } } } @@ -1950,7 +1950,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/internal_controllers.DeviceValuation" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation" } } } @@ -1980,7 +1980,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.UpdateVINReq" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq" } }, { @@ -2023,7 +2023,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.NFTImageData" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData" } } ], @@ -2057,7 +2057,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/internal_controllers.GetGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence" } } } @@ -2089,7 +2089,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.CreateGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence" } } ], @@ -2097,7 +2097,7 @@ "201": { "description": "Created", "schema": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse" + "$ref": "#/definitions/helpers.CreateResponse" } } } @@ -2137,7 +2137,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/internal_controllers.CreateGeofence" + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence" } } ], @@ -2176,6 +2176,70 @@ } } }, + "/vehicle/:tokenID/commands/burn": { + "get": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Returns the data the user must sign in order to burn the device.", + "tags": [ + "user-devices" + ], + "parameters": [ + { + "type": "integer", + "description": "token id", + "name": "tokenID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/apitypes.TypedData" + } + } + } + }, + "post": { + "security": [ + { + "BearerAuth": [] + } + ], + "description": "Sends a burn device request to the blockchain", + "tags": [ + "user-devices" + ], + "parameters": [ + { + "type": "integer", + "description": "token id", + "name": "tokenID", + "in": "path", + "required": true + }, + { + "description": "Signature and Token ID", + "name": "burnRequest", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/internal_controllers.BurnRequest" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, "/vehicle/{tokenID}/commands/doors/lock": { "post": { "description": "Lock the device's doors.", @@ -2494,7 +2558,7 @@ "big.Int": { "type": "object" }, - "github_com_DIMO-Network_devices-api_internal_constants.CountryInfo": { + "constants.CountryInfo": { "type": "object", "properties": { "alpha_2": { @@ -2523,269 +2587,1082 @@ } } }, - "github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiClaimRequest": { "type": "object", "properties": { - "id": { + "aftermarketDeviceSignature": { + "description": "AftermarketDeviceSignature is the signature from the aftermarket device.", "type": "string" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes": { - "type": "object", - "properties": { - "code": { - "type": "integer" }, - "message": { + "userSignature": { + "description": "UserSignature is the signature from the user, using their private key.", "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.AutoPiTask": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiDeviceInfo": { "type": "object", "properties": { - "code": { - "type": "integer" - }, - "description": { - "type": "string" - }, - "error": { - "type": "string" - }, - "status": { - "type": "string" + "beneficiaryAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", + "type": "array", + "items": { + "type": "integer" + } }, - "taskId": { - "type": "string" + "claim": { + "description": "Claim contains the status of the on-chain claiming meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" }, - "updatedAt": { + "deviceId": { "type": "string" }, - "updates": { - "description": "Updates increments every time the job was updated.", - "type": "integer" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute": { - "type": "object", - "properties": { - "name": { - "type": "string" + "dockerReleases": { + "type": "array", + "items": { + "type": "integer" + } }, - "value": { - "type": "string" - } - } - }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility": { - "type": "object", - "properties": { - "capabilities": { + "ethereumAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" } }, - "country": { + "hwRevision": { "type": "string" }, - "id": { - "type": "string" + "isUpdated": { + "type": "boolean" }, - "region": { + "lastCommunication": { "type": "string" }, - "style": { + "manufacturer": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo" + }, + "ownerAddress": { "type": "string" }, - "type": { + "pair": { + "description": "Pair contains the status of the on-chain pairing meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" + }, + "releaseVersion": { "type": "string" }, - "vendor": { + "shouldUpdate": { + "type": "boolean" + }, + "template": { + "type": "integer" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + }, + "unitId": { "type": "string" + }, + "unpair": { + "description": "Unpair contains the status of the on-chain unpairing meta-transaction.", + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiPairRequest": { "type": "object", "properties": { - "compatibleIntegrations": { - "description": "CompatibleIntegrations has systems this vehicle can integrate with", + "aftermarketDeviceSignature": { + "description": "AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of\nthe pairing payload by the device. Only needed if the vehicle owner and aftermarket\ndevice owner are not the same.", "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility" + "type": "integer" } }, - "deviceAttributes": { - "description": "DeviceAttributes is a list of attributes for the device type as defined in device_types.properties", + "externalId": { + "type": "string" + }, + "signature": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute" + "type": "integer" } - }, - "deviceDefinitionId": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "make": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceMake" - }, - "metadata": {}, - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceType" - }, - "vehicleData": { - "description": "VehicleInfo will be empty if not a vehicle type", - "allOf": [ - { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo" - } - ] - }, - "verified": { - "type": "boolean" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceMake": { + "github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus": { "type": "object", "properties": { - "id": { - "type": "string" + "createdAt": { + "description": "CreatedAt is the timestamp of the creation of the meta-transaction.", + "type": "string", + "example": "2022-10-01T09:22:21.002Z" }, - "logo_url": { - "type": "string" + "hash": { + "description": "Hash is the hexidecimal transaction hash, available for any transaction at the Submitted stage or greater.", + "type": "string", + "example": "0x28b4662f1e1b15083261a4a5077664f4003d58cb528826b7aab7fad466c28e70" }, - "name": { - "type": "string" + "status": { + "description": "Status is the state of the transaction performing this operation. There are only four options.", + "type": "string", + "enum": [ + "Unsubmitted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Mined" }, - "oem_platform_name": { - "type": "string" + "updatedAt": { + "description": "UpdatedAt is the last time we updated the status of the transaction.", + "type": "string", + "example": "2022-10-01T09:22:26.337Z" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceType": { + "github.com_DIMO-Network_devices-api_internal_controllers.BurnRequest": { "type": "object", + "required": [ + "signature" + ], "properties": { - "make": { - "type": "string" - }, - "model": { - "type": "string" - }, - "subModels": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type is eg. Vehicle, E-bike, roomba", + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", "type": "string" }, - "year": { - "type": "integer" + "tokenId": { + "$ref": "#/definitions/big.Int" } } }, - "github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo": { + "github.com_DIMO-Network_devices-api_internal_controllers.BurnSyntheticDeviceRequest": { "type": "object", "properties": { - "base_msrp": { - "type": "integer" - }, - "driven_wheels": { + "signature": { "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CommandRequestStatusResp": { + "type": "object", + "properties": { + "command": { + "type": "string", + "example": "doors/unlock" }, - "epa_class": { - "type": "string" + "createdAt": { + "type": "string", + "example": "2022-08-09T19:38:39Z" }, - "fuel_tank_capacity_gal": { + "id": { + "type": "string", + "example": "2D8LqUHQtaMHH6LYPqznmJMBeZm" + }, + "status": { + "type": "string", + "enum": [ + "Pending", + "Complete", + "Failed" + ], + "example": "Complete" + }, + "updatedAt": { + "type": "string", + "example": "2022-08-09T19:39:22Z" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CommandResponse": { + "type": "object", + "properties": { + "requestId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeRequest": { + "type": "object", + "properties": { + "authorizationCode": { + "type": "string" + }, + "redirectUri": { + "type": "string" + }, + "region": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse": { + "type": "object", + "properties": { + "definition": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition" + }, + "externalId": { + "type": "string" + }, + "vin": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponseWrapper": { + "type": "object", + "properties": { + "vehicles": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence": { + "type": "object", + "properties": { + "h3Indexes": { + "description": "required: false", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "required: true", + "type": "string" + }, + "type": { + "description": "one of following: \"PrivacyFence\", \"TriggerEntry\", \"TriggerExit\"\nrequired: true", + "type": "string" + }, + "userDeviceIds": { + "description": "Optionally link the geofence with a list of user device ID", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "integer" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer": { + "type": "object", + "properties": { + "offerSets": { + "description": "Contains a list of offer sets, one for each source", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.OfferSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange": { + "type": "object", + "properties": { + "rangeSets": { + "description": "Contains a list of range sets, one for each range basis (may be empty)", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RangeSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceSnapshot": { + "type": "object", + "properties": { + "ambientTemp": { + "type": "number" + }, + "batteryCapacity": { + "type": "integer" + }, + "batteryVoltage": { + "type": "number" + }, + "chargeLimit": { + "type": "number" + }, + "charging": { + "type": "boolean" + }, + "fuelPercentRemaining": { + "type": "number" + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "odometer": { + "type": "number" + }, + "oil": { + "type": "number" + }, + "range": { + "type": "number" + }, + "recordCreatedAt": { + "type": "string" + }, + "recordUpdatedAt": { + "type": "string" + }, + "soc": { + "type": "number" + }, + "tirePressure": { + "$ref": "#/definitions/smartcar.TirePressure" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation": { + "type": "object", + "properties": { + "valuationSets": { + "description": "Contains a list of valuation sets, one for each vendor", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.DocumentResponse": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "ext": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + }, + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice": { + "type": "object", + "properties": { + "mmy": { + "type": "string" + }, + "name": { + "type": "string" + }, + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "h3Indexes": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "userDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponse": { + "type": "object", + "properties": { + "queries": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem": { + "type": "object", + "properties": { + "clearedAt": { + "description": "ClearedAt is the time at which the user cleared the codes from this query.\nMay be null.", + "type": "string", + "example": "2023-05-23T12:57:05Z" + }, + "errorCodes": { + "type": "array", + "items": { + "$ref": "#/definitions/services.ErrorCodesResponse" + } + }, + "requestedAt": { + "type": "string", + "example": "2023-05-23T12:56:36Z" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceIntegrationResponse": { + "type": "object", + "properties": { + "createdAt": { + "description": "CreatedAt is the creation time of this integration for this device.", + "type": "string" + }, + "externalId": { + "description": "ExternalID is the identifier used by the third party for the device. It may be absent if we\nhaven't authorized yet.", + "type": "string" + }, + "status": { + "description": "Status is one of \"Pending\", \"PendingFirstData\", \"Active\", \"Failed\", \"DuplicateIntegration\".", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MintRequest": { + "type": "object", + "required": [ + "imageData", + "signature" + ], + "properties": { + "imageData": { + "description": "ImageData contains the base64-encoded NFT PNG image.", + "type": "string" + }, + "imageDataTransparent": { + "description": "ImageDataTransparent contains the base64-encoded NFT PNG image\nwith a transparent background, for use in the app. For compatibility\nwith older versions it is not required.", + "type": "string" + }, + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MintSyntheticDeviceRequest": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "example": "0xc565d38982e1a5004efb5ee390fba0a08bb5e72b3f3e91094c66bc395c324f785425d58d5c1a601372d9c16164e380c63e89f1e0ea95fdefdf7b2854c4f938e81b" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp": { + "type": "object", + "properties": { + "sharedDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" + } + }, + "userDevices": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute": { + "type": "object", + "properties": { + "trait_type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTData": { + "type": "object", + "properties": { + "ownerAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", + "type": "array", + "items": { + "type": "integer" + } + }, + "status": { + "description": "Status is the minting status of the NFT.", + "type": "string", + "enum": [ + "Unstarted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Confirmed" + }, + "tokenId": { + "type": "number", + "example": 37 + }, + "tokenUri": { + "type": "string", + "example": "https://nft.dimo.zone/37" + }, + "txHash": { + "description": "TxHash is the hash of the minting transaction.", + "type": "string", + "example": "0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData": { + "type": "object", + "required": [ + "imageData" + ], + "properties": { + "imageData": { + "description": "ImageData contains the base64-encoded NFT PNG image.", + "type": "string" + }, + "imageDataTransparent": { + "description": "ImageDataTransparent contains the base64-encoded NFT PNG image\nwith a transparent background, for use in the app. For compatibility\nwith older versions it is not required.", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.NFTMetadataResp": { + "type": "object", + "properties": { + "attributes": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute" + } + }, + "description": { + "type": "string" + }, + "image": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.Offer": { + "type": "object", + "properties": { + "declineReason": { + "description": "The reason the offer was declined from the vendor", + "type": "string" + }, + "error": { + "description": "An error from the vendor (eg. when the VIN is invalid)", + "type": "string" + }, + "grade": { + "description": "The grade of the offer from the vendor (eg. \"RETAIL\")", + "type": "string" + }, + "price": { + "description": "The offer price from the vendor", + "type": "integer" + }, + "url": { + "description": "The offer URL from the vendor", + "type": "string" + }, + "vendor": { + "description": "The vendor of the offer (eg. \"carmax\", \"carvana\", etc.)", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.OfferSet": { + "type": "object", + "properties": { + "mileage": { + "description": "The mileage used for the offers", + "type": "integer" + }, + "offers": { + "description": "Contains a list of offers from the source", + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Offer" + } + }, + "source": { + "description": "The source of the offers (eg. \"drivly\")", + "type": "string" + }, + "updated": { + "description": "The time the offers were pulled", + "type": "string" + }, + "zipCode": { + "description": "This will be the zip code used (if any) for the offers request regardless if the source uses it", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.Privilege": { + "type": "object", + "properties": { + "expiry": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "updatedAt": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "privileges": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Privilege" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesReq": { + "type": "object", + "properties": { + "errorCodes": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "P0106", + "P0279" + ] + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesResponse": { + "type": "object", + "properties": { + "clearedAt": { + "type": "string" + }, + "errorCodes": { + "type": "array", + "items": { + "$ref": "#/definitions/services.ErrorCodesResponse" + } + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RangeSet": { + "type": "object", + "properties": { + "rangeBasis": { + "description": "The basis for the range calculation (eg. \"MPG\" or \"MPG Highway\")", + "type": "string" + }, + "rangeDistance": { + "description": "The estimated range distance", + "type": "integer" + }, + "rangeUnit": { + "description": "The unit used for the rangeDistance (eg. \"miles\" or \"kilometers\")", + "type": "string" + }, + "updated": { + "description": "The time the data was collected", + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterDeviceIntegrationRequest": { + "type": "object", + "properties": { + "accessToken": { + "type": "string" + }, + "code": { + "description": "Code is an OAuth authorization code. Not used in all integrations.", + "type": "string" + }, + "expiresIn": { + "type": "integer" + }, + "externalId": { + "description": "ExternalID is the only field needed for AutoPi registrations. It is the UnitID.", + "type": "string" + }, + "redirectURI": { + "description": "RedirectURI is the OAuth redirect URI used by the frontend. Not used in all integrations.", + "type": "string" + }, + "refreshToken": { + "type": "string" + }, + "version": { + "type": "integer" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice": { + "type": "object", + "properties": { + "countryCode": { + "type": "string" + }, + "deviceDefinitionId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse": { + "type": "object", + "properties": { + "deviceDefinitionId": { "type": "string" }, - "fuel_type": { - "type": "string" + "integrationCapabilities": { + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceCompatibility" + } }, - "mpg": { + "userDeviceId": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar": { + "type": "object", + "properties": { + "code": { + "description": "Code refers to the auth code provided by smartcar when user logs in", "type": "string" }, - "mpg_city": { + "countryCode": { "type": "string" }, - "mpg_highway": { + "redirectURI": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN": { + "type": "object", + "properties": { + "canProtocol": { + "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", "type": "string" }, - "number_of_doors": { + "countryCode": { "type": "string" }, - "vehicle_type": { - "description": "VehicleType PASSENGER CAR, from NHTSA", + "vin": { "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse": { + "github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus": { "type": "object", "properties": { - "code": { + "address": { "type": "string", - "example": "P0148" + "example": "0xAED7EA8035eEc47E657B34eF5D020c7005487443" }, - "description": { + "status": { "type": "string", - "example": "Fuel delivery error" + "enum": [ + "Unstarted", + "Submitted", + "Mined", + "Confirmed" + ], + "example": "Confirmed" + }, + "tokenId": { + "type": "number", + "example": 15 + }, + "txHash": { + "type": "string", + "example": "0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq": { + "type": "object", + "properties": { + "countryCode": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq": { + "type": "object", + "properties": { + "name": { + "type": "string" } } }, - "github_com_DIMO-Network_devices-api_internal_services.PowertrainType": { - "type": "string", - "enum": [ - "ICE", - "HEV", - "PHEV", - "BEV", - "FCEV" + "github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq": { + "type": "object", + "required": [ + "vin" ], - "x-enum-varnames": [ - "ICE", - "HEV", - "PHEV", - "BEV", - "FCEV" - ] + "properties": { + "signature": { + "description": "Signature is the hex-encoded result of the AutoPi signing the VIN. It must\nbe present to verify the VIN.", + "type": "string", + "example": "16b15f88bbd2e0a22d1d0084b8b7080f2003ea83eab1a00f80d8c18446c9c1b6224f17aa09eaf167717ca4f355bb6dc94356e037edf3adf6735a86fc3741f5231b" + }, + "vin": { + "description": "VIN is a vehicle identification number. At the very least, it must be\n17 characters in length and contain only letters and numbers.", + "type": "string", + "example": "4Y1SL65848Z411439" + } + } }, - "github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata": { + "github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull": { "type": "object", "properties": { - "canProtocol": { - "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", + "countryCode": { "type": "string" }, - "elasticDefinitionSynced": { + "customImageUrl": { + "type": "string" + }, + "deviceDefinition": { + "$ref": "#/definitions/services.DeviceDefinition" + }, + "id": { + "type": "string" + }, + "integrations": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus" + } + }, + "metadata": { + "$ref": "#/definitions/services.UserDeviceMetadata" + }, + "name": { + "type": "string" + }, + "nft": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTData" + }, + "optedInAt": { + "type": "string" + }, + "privilegedUsers": { + "type": "array", + "items": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser" + } + }, + "vin": { + "type": "string" + }, + "vinConfirmed": { "type": "boolean" }, - "elasticRegionSynced": { + "vinCredential": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus": { + "type": "object", + "properties": { + "createdAt": { + "type": "string" + }, + "externalId": { + "type": "string" + }, + "integrationId": { + "type": "string" + }, + "integrationVendor": { + "type": "string" + }, + "metadata": { + "type": "string" + }, + "status": { + "type": "string" + }, + "syntheticDevice": { + "$ref": "#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + }, + "updatedAt": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData": { + "type": "object", + "properties": { + "expiresAt": { + "type": "string" + }, + "issuedAt": { + "type": "string" + }, + "valid": { "type": "boolean" }, - "geoDecodedCountry": { + "vin": { + "type": "string" + } + } + }, + "github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet": { + "type": "object", + "properties": { + "currency": { + "description": "eg. USD or EUR", "type": "string" }, - "geoDecodedStateProv": { + "mileage": { + "description": "The mileage used for the valuation", + "type": "integer" + }, + "odometer": { + "type": "integer" + }, + "odometerUnit": { "type": "string" }, - "postal_code": { + "retail": { + "description": "retail is equal to retailAverage when available", + "type": "integer" + }, + "retailAverage": { + "type": "integer" + }, + "retailClean": { + "description": "retailClean, retailAverage, and retailRough my not always be available", + "type": "integer" + }, + "retailRough": { + "type": "integer" + }, + "retailSource": { + "description": "Useful when Drivly returns multiple vendors and we've selected one (eg. \"drivly:blackbook\")", "type": "string" }, - "powertrainType": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.PowertrainType" + "tradeIn": { + "description": "tradeIn is equal to tradeInAverage when available", + "type": "integer" + }, + "tradeInAverage": { + "type": "integer" + }, + "tradeInClean": { + "description": "tradeInClean, tradeInAverage, and tradeInRough my not always be available", + "type": "integer" + }, + "tradeInRough": { + "type": "integer" + }, + "tradeInSource": { + "description": "Useful when Drivly returns multiple vendors and we've selected one (eg. \"drivly:blackbook\")", + "type": "string" + }, + "updated": { + "description": "The time the valuation was pulled or in the case of blackbook, this may be the event time of the device odometer which was used for the valuation", + "type": "string" + }, + "userDisplayPrice": { + "description": "UserDisplayPrice the top level value to show to users in mobile app", + "type": "integer" + }, + "vendor": { + "description": "The source of the valuation (eg. \"drivly\" or \"blackbook\")", + "type": "string" + }, + "zipCode": { + "description": "This will be the zip code used (if any) for the valuation request regardless if the vendor uses it", + "type": "string" } } }, @@ -2825,20 +3702,39 @@ } } }, - "grpc.Integration_AutoPiPowertrainTemplate": { + "grpc.Integration_AutoPiPowertrainTemplate": { + "type": "object", + "properties": { + "BEV": { + "type": "integer" + }, + "HEV": { + "type": "integer" + }, + "ICE": { + "type": "integer" + }, + "PHEV": { + "type": "integer" + } + } + }, + "helpers.CreateResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + } + }, + "helpers.ErrorRes": { "type": "object", "properties": { - "BEV": { - "type": "integer" - }, - "HEV": { - "type": "integer" - }, - "ICE": { + "code": { "type": "integer" }, - "PHEV": { - "type": "integer" + "message": { + "type": "string" } } }, @@ -2859,6 +3755,7 @@ "type": "object", "properties": { "beneficiaryAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" @@ -2866,11 +3763,7 @@ }, "claim": { "description": "Claim contains the status of the on-chain claiming meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" }, "deviceId": { "type": "string" @@ -2882,6 +3775,7 @@ } }, "ethereumAddress": { + "description": "OwnerAddress is the Ethereum address of the NFT owner.", "type": "array", "items": { "type": "integer" @@ -2904,11 +3798,7 @@ }, "pair": { "description": "Pair contains the status of the on-chain pairing meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" }, "releaseVersion": { "type": "string" @@ -2927,11 +3817,7 @@ }, "unpair": { "description": "Unpair contains the status of the on-chain unpairing meta-transaction.", - "allOf": [ - { - "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" - } - ] + "$ref": "#/definitions/internal_controllers.AutoPiTransactionStatus" } } }, @@ -2949,6 +3835,7 @@ "type": "string" }, "signature": { + "description": "AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of\nthe pairing payload by the device. Only needed if the vehicle owner and aftermarket\ndevice owner are not the same.", "type": "array", "items": { "type": "integer" @@ -2987,6 +3874,21 @@ } } }, + "internal_controllers.BurnRequest": { + "type": "object", + "required": [ + "signature" + ], + "properties": { + "signature": { + "description": "Signature is the hex encoding of the EIP-712 signature result.", + "type": "string" + }, + "tokenId": { + "$ref": "#/definitions/big.Int" + } + } + }, "internal_controllers.BurnSyntheticDeviceRequest": { "type": "object", "properties": { @@ -3218,7 +4120,7 @@ "type": "string" }, "type": { - "$ref": "#/definitions/internal_controllers.DocumentTypeEnum" + "type": "string" }, "url": { "type": "string" @@ -3228,27 +4130,6 @@ } } }, - "internal_controllers.DocumentTypeEnum": { - "type": "string", - "enum": [ - "DriversLicense", - "Other", - "VehicleTitle", - "VehicleRegistration", - "VehicleInsurance", - "VehicleMaintenance", - "VehicleCustomImage" - ], - "x-enum-varnames": [ - "DriversLicense", - "Other", - "VehicleTitle", - "VehicleRegistration", - "VehicleInsurance", - "VehicleMaintenance", - "VehicleCustomImage" - ] - }, "internal_controllers.GeoFenceUserDevice": { "type": "object", "properties": { @@ -3317,7 +4198,7 @@ "errorCodes": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse" + "$ref": "#/definitions/services.ErrorCodesResponse" } }, "requestedAt": { @@ -3593,7 +4474,7 @@ "errorCodes": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse" + "$ref": "#/definitions/services.ErrorCodesResponse" } } } @@ -3668,7 +4549,7 @@ "integrationCapabilities": { "type": "array", "items": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility" + "$ref": "#/definitions/services.DeviceCompatibility" } }, "userDeviceId": { @@ -3777,7 +4658,7 @@ "type": "string" }, "deviceDefinition": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition" + "$ref": "#/definitions/services.DeviceDefinition" }, "id": { "type": "string" @@ -3789,7 +4670,7 @@ } }, "metadata": { - "$ref": "#/definitions/github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata" + "$ref": "#/definitions/services.UserDeviceMetadata" }, "name": { "type": "string" @@ -3940,6 +4821,232 @@ "math.HexOrDecimal256": { "type": "object" }, + "services.AutoPiTask": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "error": { + "type": "string" + }, + "status": { + "type": "string" + }, + "taskId": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updates": { + "description": "Updates increments every time the job was updated.", + "type": "integer" + } + } + }, + "services.DeviceAttribute": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "services.DeviceCompatibility": { + "type": "object", + "properties": { + "capabilities": { + "type": "array", + "items": { + "type": "integer" + } + }, + "country": { + "type": "string" + }, + "id": { + "type": "string" + }, + "region": { + "type": "string" + }, + "style": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vendor": { + "type": "string" + } + } + }, + "services.DeviceDefinition": { + "type": "object", + "properties": { + "compatibleIntegrations": { + "description": "CompatibleIntegrations has systems this vehicle can integrate with", + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceCompatibility" + } + }, + "deviceAttributes": { + "description": "DeviceAttributes is a list of attributes for the device type as defined in device_types.properties", + "type": "array", + "items": { + "$ref": "#/definitions/services.DeviceAttribute" + } + }, + "deviceDefinitionId": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "make": { + "$ref": "#/definitions/services.DeviceMake" + }, + "metadata": {}, + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/services.DeviceType" + }, + "vehicleData": { + "description": "VehicleInfo will be empty if not a vehicle type", + "$ref": "#/definitions/services.DeviceVehicleInfo" + }, + "verified": { + "type": "boolean" + } + } + }, + "services.DeviceMake": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "logo_url": { + "type": "string" + }, + "name": { + "type": "string" + }, + "oem_platform_name": { + "type": "string" + } + } + }, + "services.DeviceType": { + "type": "object", + "properties": { + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "subModels": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type is eg. Vehicle, E-bike, roomba", + "type": "string" + }, + "year": { + "type": "integer" + } + } + }, + "services.DeviceVehicleInfo": { + "type": "object", + "properties": { + "base_msrp": { + "type": "integer" + }, + "driven_wheels": { + "type": "string" + }, + "epa_class": { + "type": "string" + }, + "fuel_tank_capacity_gal": { + "type": "string" + }, + "fuel_type": { + "type": "string" + }, + "mpg": { + "type": "string" + }, + "mpg_city": { + "type": "string" + }, + "mpg_highway": { + "type": "string" + }, + "number_of_doors": { + "type": "string" + }, + "vehicle_type": { + "description": "VehicleType PASSENGER CAR, from NHTSA", + "type": "string" + } + } + }, + "services.ErrorCodesResponse": { + "type": "object", + "properties": { + "code": { + "type": "string", + "example": "P0148" + }, + "description": { + "type": "string", + "example": "Fuel delivery error" + } + } + }, + "services.UserDeviceMetadata": { + "type": "object", + "properties": { + "canProtocol": { + "description": "CANProtocol is the protocol that was detected by edge-network from the autopi.", + "type": "string" + }, + "elasticDefinitionSynced": { + "type": "boolean" + }, + "elasticRegionSynced": { + "type": "boolean" + }, + "geoDecodedCountry": { + "type": "string" + }, + "geoDecodedStateProv": { + "type": "string" + }, + "postal_code": { + "type": "string" + }, + "powertrainType": { + "type": "string" + } + } + }, "smartcar.TirePressure": { "type": "object", "properties": { @@ -3966,20 +5073,9 @@ "type": "string" }, "unitSystem": { - "$ref": "#/definitions/smartcar.UnitSystem" + "type": "string" } } - }, - "smartcar.UnitSystem": { - "type": "string", - "enum": [ - "metric", - "imperial" - ], - "x-enum-varnames": [ - "Metric", - "Imperial" - ] } }, "securityDefinitions": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 56441bcad..99f9f5fc0 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -42,7 +42,7 @@ definitions: type: object big.Int: type: object - github_com_DIMO-Network_devices-api_internal_constants.CountryInfo: + constants.CountryInfo: properties: alpha_2: type: string @@ -61,186 +61,779 @@ definitions: sub_region_code: type: integer type: object - github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse: + github.com_DIMO-Network_devices-api_internal_controllers.AutoPiClaimRequest: properties: + aftermarketDeviceSignature: + description: AftermarketDeviceSignature is the signature from the aftermarket + device. + type: string + userSignature: + description: UserSignature is the signature from the user, using their private + key. + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.AutoPiDeviceInfo: + properties: + beneficiaryAddress: + description: OwnerAddress is the Ethereum address of the NFT owner. + items: + type: integer + type: array + claim: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus' + description: Claim contains the status of the on-chain claiming meta-transaction. + deviceId: + type: string + dockerReleases: + items: + type: integer + type: array + ethereumAddress: + description: OwnerAddress is the Ethereum address of the NFT owner. + items: + type: integer + type: array + hwRevision: + type: string + isUpdated: + type: boolean + lastCommunication: + type: string + manufacturer: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo' + ownerAddress: + type: string + pair: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus' + description: Pair contains the status of the on-chain pairing meta-transaction. + releaseVersion: + type: string + shouldUpdate: + type: boolean + template: + type: integer + tokenId: + $ref: '#/definitions/big.Int' + unitId: + type: string + unpair: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus' + description: Unpair contains the status of the on-chain unpairing meta-transaction. + type: object + github.com_DIMO-Network_devices-api_internal_controllers.AutoPiPairRequest: + properties: + aftermarketDeviceSignature: + description: |- + AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of + the pairing payload by the device. Only needed if the vehicle owner and aftermarket + device owner are not the same. + items: + type: integer + type: array + externalId: + type: string + signature: + items: + type: integer + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.AutoPiTransactionStatus: + properties: + createdAt: + description: CreatedAt is the timestamp of the creation of the meta-transaction. + example: "2022-10-01T09:22:21.002Z" + type: string + hash: + description: Hash is the hexidecimal transaction hash, available for any transaction + at the Submitted stage or greater. + example: 0x28b4662f1e1b15083261a4a5077664f4003d58cb528826b7aab7fad466c28e70 + type: string + status: + description: Status is the state of the transaction performing this operation. + There are only four options. + enum: + - Unsubmitted + - Submitted + - Mined + - Confirmed + example: Mined + type: string + updatedAt: + description: UpdatedAt is the last time we updated the status of the transaction. + example: "2022-10-01T09:22:26.337Z" + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.BurnRequest: + properties: + signature: + description: Signature is the hex encoding of the EIP-712 signature result. + type: string + tokenId: + $ref: '#/definitions/big.Int' + required: + - signature + type: object + github.com_DIMO-Network_devices-api_internal_controllers.BurnSyntheticDeviceRequest: + properties: + signature: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CommandRequestStatusResp: + properties: + command: + example: doors/unlock + type: string + createdAt: + example: "2022-08-09T19:38:39Z" + type: string id: + example: 2D8LqUHQtaMHH6LYPqznmJMBeZm + type: string + status: + enum: + - Pending + - Complete + - Failed + example: Complete + type: string + updatedAt: + example: "2022-08-09T19:39:22Z" + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CommandResponse: + properties: + requestId: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeRequest: + properties: + authorizationCode: + type: string + redirectUri: + type: string + region: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse: + properties: + definition: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition' + externalId: + type: string + vin: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponseWrapper: + properties: + vehicles: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CompleteOAuthExchangeResponse' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence: + properties: + h3Indexes: + description: 'required: false' + items: + type: string + type: array + name: + description: 'required: true' + type: string + type: + description: |- + one of following: "PrivacyFence", "TriggerEntry", "TriggerExit" + required: true + type: string + userDeviceIds: + description: Optionally link the geofence with a list of user device ID + items: + type: string + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DeviceDefinition: + properties: + id: + type: string + make: + type: string + model: + type: string + year: + type: integer + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer: + properties: + offerSets: + description: Contains a list of offer sets, one for each source + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.OfferSet' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange: + properties: + rangeSets: + description: Contains a list of range sets, one for each range basis (may + be empty) + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RangeSet' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DeviceSnapshot: + properties: + ambientTemp: + type: number + batteryCapacity: + type: integer + batteryVoltage: + type: number + chargeLimit: + type: number + charging: + type: boolean + fuelPercentRemaining: + type: number + latitude: + type: number + longitude: + type: number + odometer: + type: number + oil: + type: number + range: + type: number + recordCreatedAt: + type: string + recordUpdatedAt: + type: string + soc: + type: number + tirePressure: + $ref: '#/definitions/smartcar.TirePressure' + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation: + properties: + valuationSets: + description: Contains a list of valuation sets, one for each vendor + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.DocumentResponse: + properties: + createdAt: + type: string + ext: + type: string + id: + type: string + name: + type: string + type: + type: string + url: + type: string + userDeviceId: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice: + properties: + mmy: + type: string + name: + type: string + userDeviceId: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence: + properties: + createdAt: + type: string + h3Indexes: + items: + type: string + type: array + id: + type: string + name: + type: string + type: + type: string + updatedAt: + type: string + userDevices: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GeoFenceUserDevice' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponse: + properties: + queries: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceErrorCodeQueriesResponseItem: + properties: + clearedAt: + description: |- + ClearedAt is the time at which the user cleared the codes from this query. + May be null. + example: "2023-05-23T12:57:05Z" + type: string + errorCodes: + items: + $ref: '#/definitions/services.ErrorCodesResponse' + type: array + requestedAt: + example: "2023-05-23T12:56:36Z" + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.GetUserDeviceIntegrationResponse: + properties: + createdAt: + description: CreatedAt is the creation time of this integration for this device. + type: string + externalId: + description: |- + ExternalID is the identifier used by the third party for the device. It may be absent if we + haven't authorized yet. + type: string + status: + description: Status is one of "Pending", "PendingFirstData", "Active", "Failed", + "DuplicateIntegration". + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.ManufacturerInfo: + properties: + name: + type: string + tokenId: + $ref: '#/definitions/big.Int' + type: object + github.com_DIMO-Network_devices-api_internal_controllers.MintRequest: + properties: + imageData: + description: ImageData contains the base64-encoded NFT PNG image. + type: string + imageDataTransparent: + description: |- + ImageDataTransparent contains the base64-encoded NFT PNG image + with a transparent background, for use in the app. For compatibility + with older versions it is not required. + type: string + signature: + description: Signature is the hex encoding of the EIP-712 signature result. + type: string + required: + - imageData + - signature + type: object + github.com_DIMO-Network_devices-api_internal_controllers.MintSyntheticDeviceRequest: + properties: + signature: + example: 0xc565d38982e1a5004efb5ee390fba0a08bb5e72b3f3e91094c66bc395c324f785425d58d5c1a601372d9c16164e380c63e89f1e0ea95fdefdf7b2854c4f938e81b + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp: + properties: + sharedDevices: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull' + type: array + userDevices: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute: + properties: + trait_type: + type: string + value: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.NFTData: + properties: + ownerAddress: + description: OwnerAddress is the Ethereum address of the NFT owner. + items: + type: integer + type: array + status: + description: Status is the minting status of the NFT. + enum: + - Unstarted + - Submitted + - Mined + - Confirmed + example: Confirmed + type: string + tokenId: + example: 37 + type: number + tokenUri: + example: https://nft.dimo.zone/37 + type: string + txHash: + description: TxHash is the hash of the minting transaction. + example: 0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData: + properties: + imageData: + description: ImageData contains the base64-encoded NFT PNG image. + type: string + imageDataTransparent: + description: |- + ImageDataTransparent contains the base64-encoded NFT PNG image + with a transparent background, for use in the app. For compatibility + with older versions it is not required. + type: string + required: + - imageData + type: object + github.com_DIMO-Network_devices-api_internal_controllers.NFTMetadataResp: + properties: + attributes: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTAttribute' + type: array + description: + type: string + image: + type: string + name: type: string type: object - github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes: + github.com_DIMO-Network_devices-api_internal_controllers.Offer: properties: - code: + declineReason: + description: The reason the offer was declined from the vendor + type: string + error: + description: An error from the vendor (eg. when the VIN is invalid) + type: string + grade: + description: The grade of the offer from the vendor (eg. "RETAIL") + type: string + price: + description: The offer price from the vendor type: integer - message: + url: + description: The offer URL from the vendor + type: string + vendor: + description: The vendor of the offer (eg. "carmax", "carvana", etc.) type: string type: object - github_com_DIMO-Network_devices-api_internal_services.AutoPiTask: + github.com_DIMO-Network_devices-api_internal_controllers.OfferSet: properties: - code: + mileage: + description: The mileage used for the offers type: integer - description: + offers: + description: Contains a list of offers from the source + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Offer' + type: array + source: + description: The source of the offers (eg. "drivly") type: string - error: + updated: + description: The time the offers were pulled type: string - status: + zipCode: + description: This will be the zip code used (if any) for the offers request + regardless if the source uses it type: string - taskId: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.Privilege: + properties: + expiry: type: string + id: + type: integer updatedAt: type: string - updates: - description: Updates increments every time the job was updated. - type: integer type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute: + github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser: properties: - name: - type: string - value: + address: type: string + privileges: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.Privilege' + type: array type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility: + github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesReq: properties: - capabilities: + errorCodes: + example: + - P0106 + - P0279 items: - type: integer + type: string type: array - country: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.QueryDeviceErrorCodesResponse: + properties: + clearedAt: type: string - id: + errorCodes: + items: + $ref: '#/definitions/services.ErrorCodesResponse' + type: array + type: object + github.com_DIMO-Network_devices-api_internal_controllers.RangeSet: + properties: + rangeBasis: + description: The basis for the range calculation (eg. "MPG" or "MPG Highway") type: string - region: + rangeDistance: + description: The estimated range distance + type: integer + rangeUnit: + description: The unit used for the rangeDistance (eg. "miles" or "kilometers") type: string - style: + updated: + description: The time the data was collected type: string - type: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.RegisterDeviceIntegrationRequest: + properties: + accessToken: type: string - vendor: + code: + description: Code is an OAuth authorization code. Not used in all integrations. + type: string + expiresIn: + type: integer + externalId: + description: ExternalID is the only field needed for AutoPi registrations. + It is the UnitID. + type: string + redirectURI: + description: RedirectURI is the OAuth redirect URI used by the frontend. Not + used in all integrations. + type: string + refreshToken: type: string + version: + type: integer type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition: + github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice: properties: - compatibleIntegrations: - description: CompatibleIntegrations has systems this vehicle can integrate - with - items: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility' - type: array - deviceAttributes: - description: DeviceAttributes is a list of attributes for the device type - as defined in device_types.properties + countryCode: + type: string + deviceDefinitionId: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse: + properties: + deviceDefinitionId: + type: string + integrationCapabilities: items: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceAttribute' + $ref: '#/definitions/services.DeviceCompatibility' type: array - deviceDefinitionId: + userDeviceId: type: string - imageUrl: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar: + properties: + code: + description: Code refers to the auth code provided by smartcar when user logs + in type: string - make: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceMake' - metadata: {} - name: + countryCode: + type: string + redirectURI: type: string - type: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceType' - vehicleData: - allOf: - - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo' - description: VehicleInfo will be empty if not a vehicle type - verified: - type: boolean type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceMake: + github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN: properties: - id: + canProtocol: + description: CANProtocol is the protocol that was detected by edge-network + from the autopi. type: string - logo_url: + countryCode: + type: string + vin: + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus: + properties: + address: + example: 0xAED7EA8035eEc47E657B34eF5D020c7005487443 + type: string + status: + enum: + - Unstarted + - Submitted + - Mined + - Confirmed + example: Confirmed + type: string + tokenId: + example: 15 + type: number + txHash: + example: 0x30bce3da6985897224b29a0fe064fd2b426bb85a394cc09efe823b5c83326a8e + type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq: + properties: + countryCode: type: string + type: object + github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq: + properties: name: type: string - oem_platform_name: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq: + properties: + signature: + description: |- + Signature is the hex-encoded result of the AutoPi signing the VIN. It must + be present to verify the VIN. + example: 16b15f88bbd2e0a22d1d0084b8b7080f2003ea83eab1a00f80d8c18446c9c1b6224f17aa09eaf167717ca4f355bb6dc94356e037edf3adf6735a86fc3741f5231b + type: string + vin: + description: |- + VIN is a vehicle identification number. At the very least, it must be + 17 characters in length and contain only letters and numbers. + example: 4Y1SL65848Z411439 type: string + required: + - vin type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceType: + github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull: properties: - make: + countryCode: type: string - model: + customImageUrl: type: string - subModels: + deviceDefinition: + $ref: '#/definitions/services.DeviceDefinition' + id: + type: string + integrations: items: - type: string + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus' type: array - type: - description: Type is eg. Vehicle, E-bike, roomba + metadata: + $ref: '#/definitions/services.UserDeviceMetadata' + name: type: string - year: - type: integer + nft: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTData' + optedInAt: + type: string + privilegedUsers: + items: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.PrivilegeUser' + type: array + vin: + type: string + vinConfirmed: + type: boolean + vinCredential: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData' type: object - github_com_DIMO-Network_devices-api_internal_services.DeviceVehicleInfo: + github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceIntegrationStatus: properties: - base_msrp: - type: integer - driven_wheels: + createdAt: type: string - epa_class: + externalId: type: string - fuel_tank_capacity_gal: + integrationId: type: string - fuel_type: + integrationVendor: type: string - mpg: + metadata: type: string - mpg_city: + status: type: string - mpg_highway: + syntheticDevice: + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.SyntheticDeviceStatus' + tokenId: + $ref: '#/definitions/big.Int' + updatedAt: type: string - number_of_doors: + type: object + github.com_DIMO-Network_devices-api_internal_controllers.VINCredentialData: + properties: + expiresAt: type: string - vehicle_type: - description: VehicleType PASSENGER CAR, from NHTSA + issuedAt: + type: string + valid: + type: boolean + vin: type: string type: object - github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse: + github.com_DIMO-Network_devices-api_internal_controllers.ValuationSet: properties: - code: - example: P0148 + currency: + description: eg. USD or EUR type: string - description: - example: Fuel delivery error + mileage: + description: The mileage used for the valuation + type: integer + odometer: + type: integer + odometerUnit: type: string - type: object - github_com_DIMO-Network_devices-api_internal_services.PowertrainType: - enum: - - ICE - - HEV - - PHEV - - BEV - - FCEV - type: string - x-enum-varnames: - - ICE - - HEV - - PHEV - - BEV - - FCEV - github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata: - properties: - canProtocol: - description: CANProtocol is the protocol that was detected by edge-network - from the autopi. + retail: + description: retail is equal to retailAverage when available + type: integer + retailAverage: + type: integer + retailClean: + description: retailClean, retailAverage, and retailRough my not always be + available + type: integer + retailRough: + type: integer + retailSource: + description: Useful when Drivly returns multiple vendors and we've selected + one (eg. "drivly:blackbook") type: string - elasticDefinitionSynced: - type: boolean - elasticRegionSynced: - type: boolean - geoDecodedCountry: + tradeIn: + description: tradeIn is equal to tradeInAverage when available + type: integer + tradeInAverage: + type: integer + tradeInClean: + description: tradeInClean, tradeInAverage, and tradeInRough my not always + be available + type: integer + tradeInRough: + type: integer + tradeInSource: + description: Useful when Drivly returns multiple vendors and we've selected + one (eg. "drivly:blackbook") type: string - geoDecodedStateProv: + updated: + description: The time the valuation was pulled or in the case of blackbook, + this may be the event time of the device odometer which was used for the + valuation type: string - postal_code: + userDisplayPrice: + description: UserDisplayPrice the top level value to show to users in mobile + app + type: integer + vendor: + description: The source of the valuation (eg. "drivly" or "blackbook") + type: string + zipCode: + description: This will be the zip code used (if any) for the valuation request + regardless if the vendor uses it type: string - powertrainType: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.PowertrainType' type: object grpc.Integration: properties: @@ -279,6 +872,18 @@ definitions: PHEV: type: integer type: object + helpers.CreateResponse: + properties: + id: + type: string + type: object + helpers.ErrorRes: + properties: + code: + type: integer + message: + type: string + type: object internal_controllers.AutoPiClaimRequest: properties: aftermarketDeviceSignature: @@ -293,12 +898,12 @@ definitions: internal_controllers.AutoPiDeviceInfo: properties: beneficiaryAddress: + description: OwnerAddress is the Ethereum address of the NFT owner. items: type: integer type: array claim: - allOf: - - $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' + $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' description: Claim contains the status of the on-chain claiming meta-transaction. deviceId: type: string @@ -307,6 +912,7 @@ definitions: type: integer type: array ethereumAddress: + description: OwnerAddress is the Ethereum address of the NFT owner. items: type: integer type: array @@ -321,8 +927,7 @@ definitions: ownerAddress: type: string pair: - allOf: - - $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' + $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' description: Pair contains the status of the on-chain pairing meta-transaction. releaseVersion: type: string @@ -335,8 +940,7 @@ definitions: unitId: type: string unpair: - allOf: - - $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' + $ref: '#/definitions/internal_controllers.AutoPiTransactionStatus' description: Unpair contains the status of the on-chain unpairing meta-transaction. type: object internal_controllers.AutoPiPairRequest: @@ -352,6 +956,10 @@ definitions: externalId: type: string signature: + description: |- + AftermarketDeviceSignature is the 65-byte, hex-encoded Ethereum signature of + the pairing payload by the device. Only needed if the vehicle owner and aftermarket + device owner are not the same. items: type: integer type: array @@ -382,6 +990,16 @@ definitions: example: "2022-10-01T09:22:26.337Z" type: string type: object + internal_controllers.BurnRequest: + properties: + signature: + description: Signature is the hex encoding of the EIP-712 signature result. + type: string + tokenId: + $ref: '#/definitions/big.Int' + required: + - signature + type: object internal_controllers.BurnSyntheticDeviceRequest: properties: signature: @@ -540,30 +1158,12 @@ definitions: name: type: string type: - $ref: '#/definitions/internal_controllers.DocumentTypeEnum' + type: string url: type: string userDeviceId: type: string type: object - internal_controllers.DocumentTypeEnum: - enum: - - DriversLicense - - Other - - VehicleTitle - - VehicleRegistration - - VehicleInsurance - - VehicleMaintenance - - VehicleCustomImage - type: string - x-enum-varnames: - - DriversLicense - - Other - - VehicleTitle - - VehicleRegistration - - VehicleInsurance - - VehicleMaintenance - - VehicleCustomImage internal_controllers.GeoFenceUserDevice: properties: mmy: @@ -611,7 +1211,7 @@ definitions: type: string errorCodes: items: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse' + $ref: '#/definitions/services.ErrorCodesResponse' type: array requestedAt: example: "2023-05-23T12:56:36Z" @@ -811,7 +1411,7 @@ definitions: type: string errorCodes: items: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.ErrorCodesResponse' + $ref: '#/definitions/services.ErrorCodesResponse' type: array type: object internal_controllers.RangeSet: @@ -864,7 +1464,7 @@ definitions: type: string integrationCapabilities: items: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceCompatibility' + $ref: '#/definitions/services.DeviceCompatibility' type: array userDeviceId: type: string @@ -945,7 +1545,7 @@ definitions: customImageUrl: type: string deviceDefinition: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.DeviceDefinition' + $ref: '#/definitions/services.DeviceDefinition' id: type: string integrations: @@ -953,7 +1553,7 @@ definitions: $ref: '#/definitions/internal_controllers.UserDeviceIntegrationStatus' type: array metadata: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.UserDeviceMetadata' + $ref: '#/definitions/services.UserDeviceMetadata' name: type: string nft: @@ -1064,6 +1664,160 @@ definitions: type: object math.HexOrDecimal256: type: object + services.AutoPiTask: + properties: + code: + type: integer + description: + type: string + error: + type: string + status: + type: string + taskId: + type: string + updatedAt: + type: string + updates: + description: Updates increments every time the job was updated. + type: integer + type: object + services.DeviceAttribute: + properties: + name: + type: string + value: + type: string + type: object + services.DeviceCompatibility: + properties: + capabilities: + items: + type: integer + type: array + country: + type: string + id: + type: string + region: + type: string + style: + type: string + type: + type: string + vendor: + type: string + type: object + services.DeviceDefinition: + properties: + compatibleIntegrations: + description: CompatibleIntegrations has systems this vehicle can integrate + with + items: + $ref: '#/definitions/services.DeviceCompatibility' + type: array + deviceAttributes: + description: DeviceAttributes is a list of attributes for the device type + as defined in device_types.properties + items: + $ref: '#/definitions/services.DeviceAttribute' + type: array + deviceDefinitionId: + type: string + imageUrl: + type: string + make: + $ref: '#/definitions/services.DeviceMake' + metadata: {} + name: + type: string + type: + $ref: '#/definitions/services.DeviceType' + vehicleData: + $ref: '#/definitions/services.DeviceVehicleInfo' + description: VehicleInfo will be empty if not a vehicle type + verified: + type: boolean + type: object + services.DeviceMake: + properties: + id: + type: string + logo_url: + type: string + name: + type: string + oem_platform_name: + type: string + type: object + services.DeviceType: + properties: + make: + type: string + model: + type: string + subModels: + items: + type: string + type: array + type: + description: Type is eg. Vehicle, E-bike, roomba + type: string + year: + type: integer + type: object + services.DeviceVehicleInfo: + properties: + base_msrp: + type: integer + driven_wheels: + type: string + epa_class: + type: string + fuel_tank_capacity_gal: + type: string + fuel_type: + type: string + mpg: + type: string + mpg_city: + type: string + mpg_highway: + type: string + number_of_doors: + type: string + vehicle_type: + description: VehicleType PASSENGER CAR, from NHTSA + type: string + type: object + services.ErrorCodesResponse: + properties: + code: + example: P0148 + type: string + description: + example: Fuel delivery error + type: string + type: object + services.UserDeviceMetadata: + properties: + canProtocol: + description: CANProtocol is the protocol that was detected by edge-network + from the autopi. + type: string + elasticDefinitionSynced: + type: boolean + elasticRegionSynced: + type: boolean + geoDecodedCountry: + type: string + geoDecodedStateProv: + type: string + postal_code: + type: string + powertrainType: + type: string + type: object smartcar.TirePressure: properties: age: @@ -1082,16 +1836,8 @@ definitions: requestId: type: string unitSystem: - $ref: '#/definitions/smartcar.UnitSystem' - type: object - smartcar.UnitSystem: - enum: - - metric - - imperial - type: string - x-enum-varnames: - - Metric - - Imperial + type: string + type: object info: contact: {} title: DIMO Devices API @@ -1252,7 +1998,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_services.AutoPiTask' + $ref: '#/definitions/services.AutoPiTask' security: - BearerAuth: [] tags: @@ -1266,7 +2012,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo' + $ref: '#/definitions/constants.CountryInfo' tags: - countries /countries/{countryCode}: @@ -1284,7 +2030,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_constants.CountryInfo' + $ref: '#/definitions/constants.CountryInfo' "400": description: invalid country code "404": @@ -1561,14 +2307,14 @@ paths: name: user_device required: true schema: - $ref: '#/definitions/internal_controllers.RegisterUserDevice' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDevice' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/internal_controllers.RegisterUserDeviceResponse' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceResponse' security: - ApiKeyAuth: [] - BearerAuth: [] @@ -1742,7 +2488,7 @@ paths: name: mintRequest required: true schema: - $ref: '#/definitions/internal_controllers.MintRequest' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MintRequest' responses: "200": description: OK @@ -1797,7 +2543,7 @@ paths: name: name required: true schema: - $ref: '#/definitions/internal_controllers.UpdateCountryCodeReq' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateCountryCodeReq' produces: - application/json responses: @@ -1823,7 +2569,7 @@ paths: "404": description: Vehicle not found schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes' + $ref: '#/definitions/helpers.ErrorRes' security: - BearerAuth: [] summary: List all error code queries made for this vehicle. @@ -1850,7 +2596,7 @@ paths: "404": description: Vehicle not found schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes' + $ref: '#/definitions/helpers.ErrorRes' security: - BearerAuth: [] summary: Obtain, store, and return descriptions for a list of error codes from @@ -1867,11 +2613,11 @@ paths: "404": description: Vehicle not found schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes' + $ref: '#/definitions/helpers.ErrorRes' "429": description: Last query already cleared schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.ErrorRes' + $ref: '#/definitions/helpers.ErrorRes' security: - BearerAuth: [] summary: Mark the most recent set of error codes as having been cleared. @@ -2157,7 +2903,7 @@ paths: name: name required: true schema: - $ref: '#/definitions/internal_controllers.UpdateNameReq' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateNameReq' - description: user id in: path name: user_device_id @@ -2181,7 +2927,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.DeviceOffer' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceOffer' security: - BearerAuth: [] tags: @@ -2201,7 +2947,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.DeviceRange' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceRange' security: - BearerAuth: [] tags: @@ -2244,7 +2990,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.DeviceValuation' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.DeviceValuation' security: - BearerAuth: [] tags: @@ -2260,7 +3006,7 @@ paths: name: vin required: true schema: - $ref: '#/definitions/internal_controllers.UpdateVINReq' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UpdateVINReq' - description: user id in: path name: userDeviceID @@ -2289,7 +3035,7 @@ paths: name: nftIamges required: true schema: - $ref: '#/definitions/internal_controllers.NFTImageData' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.NFTImageData' responses: "204": description: No Content @@ -2310,18 +3056,18 @@ paths: name: user_device required: true schema: - $ref: '#/definitions/internal_controllers.RegisterUserDeviceSmartcar' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceSmartcar' produces: - application/json responses: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.UserDeviceFull' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull' "201": description: Created schema: - $ref: '#/definitions/internal_controllers.UserDeviceFull' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull' "400": description: validation failure "409": @@ -2347,14 +3093,14 @@ paths: name: user_device required: true schema: - $ref: '#/definitions/internal_controllers.RegisterUserDeviceVIN' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.RegisterUserDeviceVIN' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/internal_controllers.UserDeviceFull' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.UserDeviceFull' "400": description: validation failure "424": @@ -2375,7 +3121,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.MyDevicesResp' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp' security: - BearerAuth: [] tags: @@ -2389,7 +3135,7 @@ paths: "200": description: OK schema: - $ref: '#/definitions/internal_controllers.MyDevicesResp' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.MyDevicesResp' security: - BearerAuth: [] tags: @@ -2404,7 +3150,7 @@ paths: description: OK schema: items: - $ref: '#/definitions/internal_controllers.GetGeofence' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.GetGeofence' type: array security: - ApiKeyAuth: [] @@ -2422,14 +3168,14 @@ paths: name: geofence required: true schema: - $ref: '#/definitions/internal_controllers.CreateGeofence' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence' produces: - application/json responses: "201": description: Created schema: - $ref: '#/definitions/github_com_DIMO-Network_devices-api_internal_controllers_helpers.CreateResponse' + $ref: '#/definitions/helpers.CreateResponse' security: - ApiKeyAuth: [] - BearerAuth: [] @@ -2467,7 +3213,7 @@ paths: name: geofence required: true schema: - $ref: '#/definitions/internal_controllers.CreateGeofence' + $ref: '#/definitions/github.com_DIMO-Network_devices-api_internal_controllers.CreateGeofence' produces: - application/json responses: @@ -2478,6 +3224,45 @@ paths: - BearerAuth: [] tags: - geofence + /vehicle/:tokenID/commands/burn: + get: + description: Returns the data the user must sign in order to burn the device. + parameters: + - description: token id + in: path + name: tokenID + required: true + type: integer + responses: + "200": + description: OK + schema: + $ref: '#/definitions/apitypes.TypedData' + security: + - BearerAuth: [] + tags: + - user-devices + post: + description: Sends a burn device request to the blockchain + parameters: + - description: token id + in: path + name: tokenID + required: true + type: integer + - description: Signature and Token ID + in: body + name: burnRequest + required: true + schema: + $ref: '#/definitions/internal_controllers.BurnRequest' + responses: + "200": + description: OK + security: + - BearerAuth: [] + tags: + - user-devices /vehicle/{tokenID}/commands/doors/lock: post: description: Lock the device's doors. diff --git a/go.mod b/go.mod index 8fb67983d..ee0331483 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/prometheus/client_golang v1.18.0 github.com/rs/zerolog v1.32.0 github.com/segmentio/ksuid v1.0.4 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/swaggo/swag v1.16.3 github.com/testcontainers/testcontainers-go v0.27.0 github.com/tidwall/gjson v1.17.0 @@ -51,7 +51,7 @@ require ( github.com/volatiletech/strmangle v0.0.6 go.uber.org/automaxprocs v1.5.2 go.uber.org/mock v0.4.0 - golang.org/x/mod v0.15.0 + golang.org/x/mod v0.16.0 golang.org/x/oauth2 v0.16.0 ) @@ -89,7 +89,6 @@ require ( 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.15 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mfridman/interpolate v0.0.2 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect @@ -124,7 +123,6 @@ require ( golang.org/x/time v0.3.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect rsc.io/tmplfunc v0.0.3 // indirect ) @@ -151,7 +149,6 @@ require ( github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/containerd/containerd v1.7.13 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v25.0.3+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 @@ -164,7 +161,6 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc6 // indirect - github.com/opencontainers/runc v1.1.12 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect @@ -195,7 +191,7 @@ require ( github.com/prometheus/common v0.46.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - golang.org/x/crypto v0.19.0 // indirect + golang.org/x/crypto v0.21.0 // indirect google.golang.org/grpc v1.61.1 google.golang.org/protobuf v1.32.0 ) @@ -206,10 +202,10 @@ require ( github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/ethereum/go-ethereum v1.13.12 - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/jsonreference v0.20.4 // indirect - github.com/go-openapi/spec v0.20.14 // indirect - github.com/go-openapi/swag v0.22.9 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/gofiber/contrib/jwt v1.0.8 github.com/gofiber/swagger v1.0.0 github.com/gofrs/uuid v4.4.0+incompatible // indirect @@ -228,10 +224,10 @@ require ( github.com/volatiletech/inflect v0.0.1 // indirect github.com/volatiletech/randomize v0.0.1 // indirect golang.org/x/exp v0.0.0-20240213143201-ec583247a57a - golang.org/x/net v0.21.0 // indirect - golang.org/x/sys v0.17.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.18.0 // indirect + golang.org/x/tools v0.19.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect ) diff --git a/go.sum b/go.sum index f467620d5..5f6bffbf3 100644 --- a/go.sum +++ b/go.sum @@ -68,24 +68,16 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/ch-go v0.58.2 h1:jSm2szHbT9MCAB1rJ3WuCJqmGLi5UTjlNu+f530UTS0= github.com/ClickHouse/ch-go v0.58.2/go.mod h1:Ap/0bEmiLa14gYjCiRkYGbXvbe8vwdrfTYWhsuQ99aw= -github.com/ClickHouse/clickhouse-go/v2 v2.16.0 h1:rhMfnPewXPnY4Q4lQRGdYuTLRBRKJEIEYHtbUMrzmvI= -github.com/ClickHouse/clickhouse-go/v2 v2.16.0/go.mod h1:J7SPfIxwR+x4mQ+o8MLSe0oY50NNntEqCIjFe/T1VPM= +github.com/ClickHouse/clickhouse-go/v2 v2.17.1 h1:ZCmAYWpu75IyEi7+Yrs/uaAjiCGY5wfW5kXo64exkX4= +github.com/ClickHouse/clickhouse-go/v2 v2.17.1/go.mod h1:rkGTvFDTLqLIm0ma+13xmcCfr/08Gvs7KmFt1tgiWHQ= github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DIMO-Network/device-data-api v0.4.23-0.20230718210255-60a2c7be0aa7 h1:E+/o2SQ7An3ZPxbr2lMgv0MjKrk+q//PME2SUaB2hlM= -github.com/DIMO-Network/device-data-api v0.4.23-0.20230718210255-60a2c7be0aa7/go.mod h1:kVJwYVg1ThTY3DA2AFLz2hIMK9yOpxV2BgZ4Wd7qMxg= github.com/DIMO-Network/device-data-api v0.9.4 h1:w31e1MlNxfGGRaCrhTu0eJCnoAWEhC5XcWPnScB8U4I= github.com/DIMO-Network/device-data-api v0.9.4/go.mod h1:baYdTSvvNzuRVVI99dX9oeB/YRCAa/rW+PRTKbZqdA0= -github.com/DIMO-Network/device-definitions-api v1.0.32 h1:4AfU6RFk0EmFPgjtaC9oWzSdLA5KmdlCfRjK6Sen32w= -github.com/DIMO-Network/device-definitions-api v1.0.32/go.mod h1:MwWv2OLNGcyA76Pcbxyipu+vFaM8gw/G7YnX+SiEhUk= github.com/DIMO-Network/device-definitions-api v1.0.39 h1:8WzTURsna2yRXBy0LcC8kIMwZAlFjPP3SvWfTBkQVj0= github.com/DIMO-Network/device-definitions-api v1.0.39/go.mod h1:ev3RG07AKzunh7lH2qcvLUT6U/qhJ1MvpXZkvHB++bs= github.com/DIMO-Network/go-mnemonic v0.0.0-20230406181942-6ddfe6f8c21c h1:sKuB4i3m/5NpLjO6tKyc2gSqQHmRe02sMP+pQqJNTuQ= github.com/DIMO-Network/go-mnemonic v0.0.0-20230406181942-6ddfe6f8c21c/go.mod h1:K5a/Iqh9iZYdMSh3UE3J+tc4aV1PxHe4Fz0ZEhZMPbg= -github.com/DIMO-Network/shared v0.10.6 h1:ceG09AQ/3wLehxrVCgiH97iEYPC00yQezv2oGSzetYs= -github.com/DIMO-Network/shared v0.10.6/go.mod h1:sfeTTaAf4Y5aU15yGTksdZejJP+X6M2n2M70Qm5+Rqk= -github.com/DIMO-Network/shared v0.10.8 h1:cXbb/YcAxKjmq6UJMNxaTdVdECBN8UXOzos7XjZdTFs= -github.com/DIMO-Network/shared v0.10.8/go.mod h1:sfeTTaAf4Y5aU15yGTksdZejJP+X6M2n2M70Qm5+Rqk= github.com/DIMO-Network/shared v0.10.10 h1:h9b0oj0hSvR2CRp6PzqPhsSjf03XUyTGFsAlPv1g1XM= github.com/DIMO-Network/shared v0.10.10/go.mod h1:sfeTTaAf4Y5aU15yGTksdZejJP+X6M2n2M70Qm5+Rqk= github.com/DIMO-Network/synthetic-wallet-instance v0.0.0-20230601233541-6a4c8afb27d3 h1:XMU6rRN57hoh7IYyuVytsIKzDymrbAnnKECFeVf88Hg= @@ -97,8 +89,8 @@ github.com/DIMO-Network/valuations-api v0.2.0/go.mod h1:tyAS6yoWCqbGAkXEMo35Ukaa github.com/DIMO-Network/zflogger v1.0.0-beta h1:SlXZmahk4tZqprjHzp14mbLQFMrOcyJ9jpLJLQk8bhw= github.com/DIMO-Network/zflogger v1.0.0-beta/go.mod h1:JZX9lQhjzPs9auqY+oNruiWsvhBufEopRRLWraSi148= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/IBM/sarama v1.42.2 h1:VoY4hVIZ+WQJ8G9KNY/SQlWguBQXQ9uvFPOnrcu8hEw= github.com/IBM/sarama v1.42.2/go.mod h1:FLPGUGwYqEs62hq2bVG6Io2+5n+pS6s/WOXVKWSLFtE= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= @@ -115,16 +107,11 @@ github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYx github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.26.0/go.mod h1:y/CFFTO9eaMTNriwu/Q+W4eioLqiDMGkA1W+gmdfj8w= -github.com/Shopify/sarama v1.33.0/go.mod h1:lYO7LwEBkE0iAeTl94UfPSrDaavFzSFlmn+5isARATQ= github.com/Shopify/sarama v1.38.1 h1:lqqPUPQZ7zPqYlWpTh+LQ9bhYNu2xJL6k1SJN4WVe2A= github.com/Shopify/sarama v1.38.1/go.mod h1:iwv9a67Ha8VNa+TifujYoWGxWnu2kNVAQdSdZ4X2o5g= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= -github.com/Shopify/toxiproxy/v2 v2.4.0/go.mod h1:3ilnjng821bkozDRxNoo64oI/DKqM+rOyJzb564+bvg= github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT0eahc= github.com/Shopify/toxiproxy/v2 v2.5.0/go.mod h1:yhM2epWtAmel9CB8r2+L+PCmhH6yH2pITaPAo7jxJl0= github.com/ThreeDotsLabs/watermill v1.0.2/go.mod h1:vZCPh7eN0P7r2qKau4SfmcUZ83+3JXWkRl4BiWUlqFw= @@ -132,20 +119,19 @@ github.com/ThreeDotsLabs/watermill v1.1.1 h1:+9NXqWQvplzxBru2CIInvVOZeKUnM+Nysg4 github.com/ThreeDotsLabs/watermill v1.1.1/go.mod h1:Qd1xNFxolCAHCzcMrm6RnjW0manbvN+DJVWc1MWRFlI= github.com/ThreeDotsLabs/watermill-kafka/v2 v2.2.1 h1:LRTEmcrlLyyonv+mAoDLVV7sDqquOLisN9iEGS2L80c= github.com/ThreeDotsLabs/watermill-kafka/v2 v2.2.1/go.mod h1:eoLUMudD+n7b5HS2PXyInAK5N/NZdElbI3+2AciTE2c= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9 h1:goHVqTbFX3AIo0tzGr14pgfAW2ZfPChKO21Z9MGf/gk= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230512164433-5d1fd1a340c9/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/apmckinlay/gsuneido v0.0.0-20180907175622-1f10244968e3/go.mod h1:hJnaqxrCRgMCTWtpNz9XUFkBCREiQdlcyK6YNmOfroM= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -161,80 +147,42 @@ github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= github.com/aws/aws-sdk-go v1.43.45 h1:2708Bj4uV+ym62MOtBnErm/CDX61C4mFe9V2gXy1caE= github.com/aws/aws-sdk-go v1.43.45/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= -github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= github.com/aws/aws-sdk-go-v2 v1.25.0 h1:sv7+1JVJxOu/dD/sz/csHX7jFqmP001TIY7aytBWDSQ= github.com/aws/aws-sdk-go-v2 v1.25.0/go.mod h1:G104G1Aho5WqF+SR3mDIobTABQzpYV0WxMsKxlMggOA= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4/go.mod h1:usURWEKSNNAcAZuzRn/9ZYPT8aZQkR7xcCtunK/LkJo= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.0 h1:2UO6/nT1lCZq1LqM67Oa4tdgP1CvL1sLSxvuD+VrOeE= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.0/go.mod h1:5zGj2eA85ClyedTDK+Whsu+w9yimnVIZvhvBKrDquM8= -github.com/aws/aws-sdk-go-v2/config v1.26.3 h1:dKuc2jdp10y13dEEvPqWxqLoc0vF3Z9FC45MvuQSxOA= -github.com/aws/aws-sdk-go-v2/config v1.26.3/go.mod h1:Bxgi+DeeswYofcYO0XyGClwlrq3DZEXli0kLf4hkGA0= github.com/aws/aws-sdk-go-v2/config v1.27.0 h1:J5sdGCAHuWKIXLeXiqr8II/adSvetkx0qdZwdbXXpb0= github.com/aws/aws-sdk-go-v2/config v1.27.0/go.mod h1:cfh8v69nuSUohNFMbIISP2fhmblGmYEOKs5V53HiHnk= -github.com/aws/aws-sdk-go-v2/credentials v1.16.14 h1:mMDTwwYO9A0/JbOCOG7EOZHtYM+o7OfGWfu0toa23VE= -github.com/aws/aws-sdk-go-v2/credentials v1.16.14/go.mod h1:cniAUh3ErQPHtCQGPT5ouvSAQ0od8caTO9OOuufZOAE= github.com/aws/aws-sdk-go-v2/credentials v1.17.0 h1:lMW2x6sKBsiAJrpi1doOXqWFyEPoE886DTb1X0wb7So= github.com/aws/aws-sdk-go-v2/credentials v1.17.0/go.mod h1:uT41FIH8cCIxOdUYIL0PYyHlL1NoneDuDSCwg5VE/5o= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.0 h1:xWCwjjvVz2ojYTP4kBKUuUh9ZrXfcAXpflhOUUeXg1k= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.0/go.mod h1:j3fACuqXg4oMTQOR2yY7m0NmJY0yBK4L4sLsRXq1Ins= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.0 h1:NPs/EqVO+ajwOoq56EfcGKa3L3ruWuazkIw1BqxwOPw= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.0/go.mod h1:D+duLy2ylgatV+yTlQ8JTuLfDD0BnFvnQRc+o6tbZ4M= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.0 h1:ks7KGMVUMoDzcxNWUlEdI+/lokMFD136EL6DWmUOV80= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.0/go.mod h1:hL6BWM/d/qz113fVitZjbXR0E+RCTU1+x+1Idyn5NgE= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 h1:5oE2WzJE56/mVveuDZPJESKlg/00AaS2pY2QZcnxg4M= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10/go.mod h1:FHbKWQtRBYUz4vO5WBWjzMD2by126ny5y/1EoaWoLfI= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.0 h1:TkbRExyKSVHELwG9gz2+gql37jjec2R5vus9faTomwE= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.0/go.mod h1:T3/9xMKudHhnj8it5EqIrhvv11tVZqWYkKcot+BFStc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.0 h1:a33HuFlO0KsveiP90IUJh8Xr/cx9US2PqkSroaLc+o8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.0/go.mod h1:SxIkWpByiGbhbHYTo9CMTUnx2G4p4ZQMrDPcRRy//1c= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 h1:L0ai8WICYHozIKK+OtPzVJBugL7culcuM4E4JOpIEm8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10/go.mod h1:byqfyxJBshFk0fF9YmK0M0ugIO8OWjzH2T3bPG4eGuA= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.0 h1:UiSyK6ent6OKpkMJN3+k5HZ4sk4UfchEaaW5wv7SblQ= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.0/go.mod h1:l7kzl8n8DXoRyFz5cIMG70HnPauWa649TUhgw8Rq6lo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.0 h1:SHN/umDLTmFTmYfI+gkanz6da3vK8Kvj/5wkqnTHbuA= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.0/go.mod h1:l8gPU5RYGOFHJqWEpPMoRTP0VoaWQSkJdKo+hwWnnDA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 h1:KOxnQeWy5sXyS37fdKEvAsGHOr9fa/qvwxfJurR/BzE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10/go.mod h1:jMx5INQFYFYB3lQD9W0D8Ohgq6Wnl7NYOJ2TQndbulI= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.0 h1:l5puwOHr7IxECuPMIuZG7UKOzAnF24v6t4l+Z5Moay4= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.0/go.mod h1:Oov79flWa/n7Ni+lQC3z+VM7PoRM47omRqbJU9B5Y7E= -github.com/aws/aws-sdk-go-v2/service/kms v1.27.9 h1:W9PbZAZAEcelhhjb7KuwUtf+Lbc+i7ByYJRuWLlnxyQ= -github.com/aws/aws-sdk-go-v2/service/kms v1.27.9/go.mod h1:2tFmR7fQnOdQlM2ZCEPpFnBIQD1U8wmXmduBgZbOag0= github.com/aws/aws-sdk-go-v2/service/kms v1.28.0 h1:uYDKfFYCLNZ9dttbgvit02my12GkNdifppa4sepIGz8= github.com/aws/aws-sdk-go-v2/service/kms v1.28.0/go.mod h1:Y/mkxhbaWCswchbBBLRwet6uYKl/026DZXS87c0DmuU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0 h1:PJTdBMsyvra6FtED7JZtDpQrIAflYDHFoZAu/sKYkwU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0/go.mod h1:4qXHrG1Ne3VGIMZPCB8OjH/pLFO94sKABIusjh0KWPU= github.com/aws/aws-sdk-go-v2/service/s3 v1.49.0 h1:VfU15izXQjz4m9y1DkbY79iylIiuPwWtrram4cSpWEI= github.com/aws/aws-sdk-go-v2/service/s3 v1.49.0/go.mod h1:1o/W6JFUuREj2ExoQ21vHJgO7wakvjhol91M9eknFgs= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.6 h1:dGrs+Q/WzhsiUKh82SfTVN66QzyulXuMDTV/G8ZxOac= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.6/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= github.com/aws/aws-sdk-go-v2/service/sso v1.19.0 h1:u6OkVDxtBPnxPkZ9/63ynEe+8kHbtS5IfaC4PzVxzWM= github.com/aws/aws-sdk-go-v2/service/sso v1.19.0/go.mod h1:YqbU3RS/pkDVu+v+Nwxvn0i1WB0HkNWEePWbmODEbbs= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6 h1:Yf2MIo9x+0tyv76GljxzqA3WtC5mw7NmazD2chwjxE4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.6/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.0 h1:6DL0qu5+315wbsAEEmzK+P9leRwNbkp+lGjPC+CEvb8= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.22.0/go.mod h1:olUAyg+FaoFaL/zFaeQQONjOZ9HXoxgvI/c7mQTYz7M= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= github.com/aws/aws-sdk-go-v2/service/sts v1.27.0 h1:cjTRjh700H36MQ8M0LnDn33W3JmwC77mdxIIyPWCdpM= github.com/aws/aws-sdk-go-v2/service/sts v1.27.0/go.mod h1:nXfOBMWPokIbOY+Gi7a1psWMSvskUCemZzI+SMB7Akc= -github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= -github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/aws/smithy-go v1.20.0 h1:6+kZsCXZwKxZS9RfISnPc4EXlHoyAkm2hPuM8X2BrrQ= github.com/aws/smithy-go v1.20.0/go.mod h1:uo5RKksAl4PzhqaAbjd4rLgFoq5koTsQKYuGe7dklGc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -249,8 +197,7 @@ github.com/bsm/redislock v0.7.2 h1:jggqOio8JyX9FJBKIfjF3fTxAu/v7zC5mAID9LveqG4= github.com/bsm/redislock v0.7.2/go.mod h1:kS2g0Yvlymc9Dz8V3iVYAtLAaSVruYbAFdYBDrmC5WU= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= -github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd h1:js1gPwhcFflTZ7Nzl7WHaOTlTr5hIrR4n1NM4v9n4Kw= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= @@ -258,13 +205,11 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -306,20 +251,22 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk= -github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y= +github.com/cockroachdb/errors v1.8.1/go.mod h1:qGwQn6JmZ+oMjuLwjWzUNqblqk0xl4CVV3SQbGwK7Ac= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A= +github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593/go.mod h1:6hk1eMY/u5t+Cf18q5lFMUA1Rc+Sm5I6Ra1QuPyxXCo= +github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw= +github.com/cockroachdb/redact v1.0.8/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM= +github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/containerd/containerd v1.7.11 h1:lfGKw3eU35sjV0aG2eYZTiwFEY1pCzxdzicHP3SZILw= -github.com/containerd/containerd v1.7.11/go.mod h1:5UluHxHTX2rdvYuZ5OJTC5m/KJNs0Zs9wVoJm9zf5ZE= github.com/containerd/containerd v1.7.13 h1:wPYKIeGMN8vaggSKuV1X0wZulpMz4CrgEsZdaCyB6Is= github.com/containerd/containerd v1.7.13/go.mod h1:zT3up6yTRfEUa6+GsITYIJNgSVL9NQ4x4h1RPzk0Wu4= github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= @@ -331,8 +278,10 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -361,14 +310,8 @@ github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/ github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/cli v24.0.7+incompatible h1:wa/nIwYFW7BVTGa7SWPVyyXU9lgORqUb1xfI36MSkFg= github.com/docker/cli v24.0.7+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= -github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= -github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v25.0.3+incompatible h1:D5fy/lYmY7bvZa0XTZ5/UJPljor41F+vdyJG5luQLfQ= github.com/docker/docker v25.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -378,24 +321,15 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= -github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-resiliency v1.5.0 h1:dRsaR00whmQD+SgVKlq/vCRFNgtEb5yppyeVos3Yce0= github.com/eapache/go-resiliency v1.5.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6 h1:8yY/I9ndfrgrXUbOGObLHKBR4Fl3nZXwM2c7OYTT8hM= -github.com/eapache/go-xerial-snappy v0.0.0-20230111030713-bf00bc1b83b6/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/elastic/elastic-transport-go/v8 v8.0.0-20211216131617-bbee439d559c/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI= -github.com/elastic/elastic-transport-go/v8 v8.1.0 h1:NeqEz1ty4RQz+TVbUrpSU7pZ48XkzGWQj02k5koahIE= -github.com/elastic/elastic-transport-go/v8 v8.1.0/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI= github.com/elastic/elastic-transport-go/v8 v8.4.0 h1:EKYiH8CHd33BmMna2Bos1rDNMM89+hdgcymI+KzJCGE= github.com/elastic/elastic-transport-go/v8 v8.4.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= -github.com/elastic/go-elasticsearch/v8 v8.6.0 h1:xMaSe8jIh7NHzmNo9YBkewmaD2Pr+tX+zLkXxhieny4= -github.com/elastic/go-elasticsearch/v8 v8.6.0/go.mod h1:Usvydt+x0dv9a1TzEUaovqbJor8rmOHy5dSmPeMAE2k= github.com/elastic/go-elasticsearch/v8 v8.12.0 h1:krkiCf4peJa7bZwGegy01b5xWWaYpik78wvisTeRO1U= github.com/elastic/go-elasticsearch/v8 v8.12.0/go.mod h1:wSzJYrrKPZQ8qPuqAqc6KMR4HrBfHnZORvyL+FMFqq0= github.com/elastic/go-sysinfo v1.11.2 h1:mcm4OSYVMyws6+n2HIVMGkln5HOpo5Ie1ZmbbNn0jg4= @@ -416,8 +350,6 @@ github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5 h1:HQGCJNlqt github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5/go.mod h1:1yj25TwtUlJ+pfOu9apAVaM1RWfZGg+aFpd4hPQZekQ= github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= -github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/ethereum/go-ethereum v1.13.12 h1:iDr9UM2JWkngBHGovRJEQn4Kor7mT4gt9rUZqB5M29Y= github.com/ethereum/go-ethereum v1.13.12/go.mod h1:hKL2Qcj1OvStXNSEDbucexqnEt1Wh4Cz329XsjAalZY= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -425,10 +357,11 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= @@ -441,8 +374,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= -github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw= @@ -466,28 +399,14 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre 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/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.20.1 h1:MkK4VEIEZMj4wT9PmjaUmGflVBr9nvud4Q4UVFbDoBE= -github.com/go-openapi/jsonpointer v0.20.1/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.3 h1:EjGcjTW8pD1mRis6+w/gmoBdqv5+RbE9B85D1NgDOVQ= -github.com/go-openapi/jsonreference v0.20.3/go.mod h1:FviDZ46i9ivh810gqzFLl5NttD5q3tSlMLqLr6okedM= -github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= -github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= -github.com/go-openapi/spec v0.20.12 h1:cgSLbrsmziAP2iais+Vz7kSazwZ8rsUZd6TUzdDgkVI= -github.com/go-openapi/spec v0.20.12/go.mod h1:iSCgnBcwbMW9SfzJb8iYynXvcY6C/QFrI7otzF7xGM4= -github.com/go-openapi/spec v0.20.14 h1:7CBlRnw+mtjFGlPDRZmAMnq35cRzI91xj03HVyUi/Do= -github.com/go-openapi/spec v0.20.14/go.mod h1:8EOhTpBoFiask8rrgwbLC3zmJfz4zsCUueRuPM6GNkw= -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.5 h1:fVS63IE3M0lsuWRzuom3RLwUMVI2peDH01s6M70ugys= -github.com/go-openapi/swag v0.22.5/go.mod h1:Gl91UqO+btAM0plGGxHqJcQZ1ZTy6jbmridBTsDy8A0= -github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= -github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= @@ -505,17 +424,10 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78 github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofiber/contrib/jwt v1.0.2 h1:xVzXdBfwPhmCxVHI5MqXvYLt4Zo/8cyhhvlOA1lOU5c= -github.com/gofiber/contrib/jwt v1.0.2/go.mod h1:UoenkOUg1MTcazOGrOwxoaIaQ0gcWvzq96ebzTS0R1A= github.com/gofiber/contrib/jwt v1.0.8 h1:/GeOsm/Mr1OGr0GTy+RIVSz5VgNNyP3ZgK4wdqxF/WY= github.com/gofiber/contrib/jwt v1.0.8/go.mod h1:gWWBtBiLmKXRN7xy6a96QO0KGvPEyxdh8x496Ujtg84= -github.com/gofiber/fiber/v2 v2.50.0/go.mod h1:21eytvay9Is7S6z+OgPi7c7n4++tnClWmhpimVHMimw= -github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= -github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/gofiber/fiber/v2 v2.52.1 h1:1RoU2NS+b98o1L77sdl5mboGPiW+0Ypsi5oLmcYlgHI= github.com/gofiber/fiber/v2 v2.52.1/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= -github.com/gofiber/swagger v0.1.14 h1:o524wh4QaS4eKhUCpj7M0Qhn8hvtzcyxDsfZLXuQcRI= -github.com/gofiber/swagger v0.1.14/go.mod h1:DCk1fUPsj+P07CKaZttBbV1WzTZSQcSxfub8y9/BFr8= github.com/gofiber/swagger v1.0.0 h1:BzUzDS9ZT6fDUa692kxmfOjc1DZiloLiPK/W5z1H1tc= github.com/gofiber/swagger v1.0.0/go.mod h1:QrYNF1Yrc7ggGK6ATsJ6yfH/8Zi5bu9lA7wB8TmCecg= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= @@ -534,8 +446,6 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= @@ -575,7 +485,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -601,6 +510,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -629,9 +540,6 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -642,7 +550,6 @@ github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/Oth github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -653,7 +560,10 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1 h1:HcUWd006luQPljE73d5sk+ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.1/go.mod h1:w9Y7gY31krpLmrVU5ZPG9H7l9fZuRu5/3R3S3FMtVQ4= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= @@ -661,6 +571,8 @@ github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOj github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -693,17 +605,17 @@ github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk= -github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= @@ -718,8 +630,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.5.1 h1:5I9etrGkLrN+2XPCsi6XLlV5DITbSL/xBZdmAxFcXPI= -github.com/jackc/pgx/v5 v5.5.1/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/pgx/v5 v5.5.2 h1:iLlpgp4Cp/gC9Xuscl7lFL1PhhW+ZLtXZcrfCt4C3tA= +github.com/jackc/pgx/v5 v5.5.2/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= @@ -736,9 +648,6 @@ github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVET github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= -github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= -github.com/jcmturner/gokrb5/v8 v8.4.3 h1:iTonLeSJOn7MVUtyMT+arAn5AKAPrkilzhGw8wE/Tq8= -github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= @@ -773,12 +682,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI= github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -787,7 +690,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -797,15 +699,17 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libsql/sqlite-antlr4-parser v0.0.0-20230802215326-5cb5bb604475 h1:6PfEMwfInASh9hkN83aR0j4W/eKaAZt/AURtXAXlas0= +github.com/libsql/sqlite-antlr4-parser v0.0.0-20230802215326-5cb5bb604475/go.mod h1:20nXSmcf0nAscrzqsXeC2/tA3KkV2eCiJqYuyAgl+ss= github.com/lithammer/shortuuid/v3 v3.0.4/go.mod h1:RviRjexKqIzx/7r1peoAITm6m7gnif/h+0zmolKJjzw= github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJVuvyJQQ8= github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= -github.com/lovoo/goka v1.1.7 h1:G/blRrt5dgY6VM6+PMQiPcE7aJdJIuVS2iWgOgT1rZk= -github.com/lovoo/goka v1.1.7/go.mod h1:Fu8O3gQLukdSr0q5mw46qT5htiT7MmiRFusHvZ0J69A= github.com/lovoo/goka v1.1.11 h1:tRFt/6SRIDycialothmt1bKz8AUXaViyquqyyTjcplI= github.com/lovoo/goka v1.1.11/go.mod h1:K6TKOGJEVsblAgyeAA1efLGEWCyiIkL4i3T08/O6Yog= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= @@ -814,9 +718,6 @@ github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed/go.mod h1:ilwx/Dt github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -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/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -840,8 +741,6 @@ github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZ github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ= @@ -859,6 +758,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= @@ -887,18 +788,13 @@ github.com/nats-io/jwt/v2 v2.4.1 h1:Y35W1dgbbz2SQUYDPCaclXcuqleVmpbRa7646Jf2EX4= github.com/nats-io/jwt/v2 v2.4.1/go.mod h1:24BeQtRwxRV8ruvC4CojXlx/WQ/VjuwlYiH+vu/+ibI= github.com/nats-io/nats-server/v2 v2.9.16 h1:SuNe6AyCcVy0g5326wtyU8TdqYmcPqzTjhkHojAjprc= github.com/nats-io/nats-server/v2 v2.9.16/go.mod h1:z1cc5Q+kqJkz9mLUdlcSsdYnId4pyImHjNgoh6zxSC0= -github.com/nats-io/nats.go v1.25.0 h1:t5/wCPGciR7X3Mu8QOi4jiJaXaWM8qtkLu4lzGZvYHE= -github.com/nats-io/nats.go v1.25.0/go.mod h1:D2WALIhz7V8M0pH8Scx8JZXlg6Oqz5VG+nQkK8nJdvg= github.com/nats-io/nats.go v1.33.0 h1:rRg0l2F29B30n6EPl0j50hl8eYp7rA2ecoJ74E62US8= github.com/nats-io/nats.go v1.33.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= -github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA= -github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64= github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI= github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -922,12 +818,9 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= -github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= github.com/opencontainers/image-spec v1.1.0-rc6 h1:XDqvyKsJEbRtATzkgItUqBA7QHk58yxX1Ov9HERHNqU= github.com/opencontainers/image-spec v1.1.0-rc6/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.10 h1:EaL5WeO9lv9wmS6SASjszOeQdSctvpbu0DdBQBizE40= -github.com/opencontainers/runc v1.1.10/go.mod h1:+/R6+KmDlh+hOO8NkjmgkG9Qzvypzk0yXxAPYYR65+M= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= @@ -943,10 +836,6 @@ github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/piprate/json-gold v0.5.0 h1:RmGh1PYboCFcchVFuh2pbSWAZy4XJaqTMU4KQYsApbM= @@ -965,25 +854,17 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= -github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/pquerna/cachecontrol v0.2.0 h1:vBXSNuE5MYP9IJ5kjsdo8uq+w41jSPgvba2DEnkRx9k= github.com/pquerna/cachecontrol v0.2.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/pressly/goose/v3 v3.17.0 h1:fT4CL3LRm4kfyLuPWzDFAoxjR5ZHjeJ6uQhibQtBaIs= -github.com/pressly/goose/v3 v3.17.0/go.mod h1:22aw7NpnCPlS86oqkO/+3+o9FuCaJg4ZVWRUO3oGzHQ= github.com/pressly/goose/v3 v3.18.0 h1:CUQKjZ0li91GLrMekHPR0yz4UyjT21AqyhSm/ERcPTo= github.com/pressly/goose/v3 v3.18.0/go.mod h1:NTDry9taDJXEV6IqkABnZqm1MRGOSrCWrNEz1x6f4wI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -996,9 +877,6 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y= github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1006,7 +884,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1017,8 +894,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qq github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1026,12 +901,13 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= @@ -1044,8 +920,6 @@ github.com/sethvargo/go-retry v0.2.4 h1:T+jHEQy/zKJf5s95UkguisicE0zuF9y7+/vgz08O github.com/sethvargo/go-retry v0.2.4/go.mod h1:1afjQuvh7s4gflMObvjLPaWgluLLyhA1wmVZ6KLpICw= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil/v3 v3.23.11 h1:i3jP9NjCPUz7FiZKxlMnODZkdSIp2gnzfrvsu9CuWEQ= -github.com/shirou/gopsutil/v3 v3.23.11/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= github.com/shirou/gopsutil/v3 v3.24.1 h1:R3t6ondCEvmARp3wxODhXMTLC/klMa87h2PHUw5m7QI= github.com/shirou/gopsutil/v3 v3.24.1/go.mod h1:UU7a2MSBQa+kW1uuDq8DeEBS8kmrnQwsv2b5O513rwU= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= @@ -1056,11 +930,9 @@ github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9Nz github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcar/go-sdk v1.4.0 h1:wH8qr64XSumk2QlcEHn68EqgQWMtIsJ/x4Ig8bjtbiU= @@ -1092,23 +964,19 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/swaggo/files/v2 v2.0.0 h1:hmAt8Dkynw7Ssz46F6pn8ok6YmGZqHSVLZ+HQM7i0kw= github.com/swaggo/files/v2 v2.0.0/go.mod h1:24kk2Y9NYEJ5lHuCra6iVwkMjIekMCaFq/0JQj66kyM= -github.com/swaggo/swag v1.16.2 h1:28Pp+8DkQoV+HLzLx8RGJZXNGKbFqnuvSbAAtoxiY04= -github.com/swaggo/swag v1.16.2/go.mod h1:6YzXnDcpr0767iOejs318CwYkCQqyGer6BizOg03f+E= 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/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c= -github.com/testcontainers/testcontainers-go v0.26.0/go.mod h1:ICriE9bLX5CLxL9OFQ2N+2N+f+803LNJ1utJb1+Inx0= github.com/testcontainers/testcontainers-go v0.27.0 h1:IeIrJN4twonTDuMuBNQdKZ+K97yd7VrmNGu+lDpYcDk= github.com/testcontainers/testcontainers-go v0.27.0/go.mod h1:+HgYZcd17GshBUZv9b+jKFJ198heWPQq3KQIp2+N+7U= github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= @@ -1118,8 +986,6 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU= github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= @@ -1128,15 +994,16 @@ github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5I github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4= github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY= +github.com/tursodatabase/libsql-client-go v0.0.0-20231216154754-8383a53d618f h1:teZ0Pj1Wp3Wk0JObKBiKZqgxhYwLeJhVAyj6DRgmQtY= +github.com/tursodatabase/libsql-client-go v0.0.0-20231216154754-8383a53d618f/go.mod h1:UMde0InJz9I0Le/1YIR4xsB0E2vb01MrDY6k/eNdfkg= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.50.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA= -github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= -github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= github.com/valyala/fasthttp v1.52.0 h1:wqBQpxH71XW0e2g+Og4dzQM8pk34aFYlA1Ga8db7gU0= github.com/valyala/fasthttp v1.52.0/go.mod h1:hf5C4QnVMkNXMspnsUlfM3WitlgYflyhHYoKol/szxQ= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= @@ -1153,18 +1020,11 @@ github.com/volatiletech/null/v8 v8.1.2 h1:kiTiX1PpwvuugKwfvUNX/SU/5A2KGZMXfGD0DU github.com/volatiletech/null/v8 v8.1.2/go.mod h1:98DbwNoKEpRrYtGjWFctievIfm4n4MxG0A6EBUcoS5g= github.com/volatiletech/randomize v0.0.1 h1:eE5yajattWqTB2/eN8df4dw+8jwAzBtbdo5sbWC4nMk= github.com/volatiletech/randomize v0.0.1/go.mod h1:GN3U0QYqfZ9FOJ67bzax1cqZ5q2xuj2mXrXBjWaRTlY= -github.com/volatiletech/sqlboiler/v4 v4.15.0 h1:+twm3mA34SaUF6wB9U6QkXxkK8AKkV5EfgMSvcKWeY4= -github.com/volatiletech/sqlboiler/v4 v4.15.0/go.mod h1:s643wqYyCQ7Ak2hMVxH7kTS0+lFPNlj+gHKUIukJ0YA= github.com/volatiletech/sqlboiler/v4 v4.16.2 h1:PcV2bxjE+S+GwPKCyX7/AjlY3aiTKsOEjciLhpWQImc= github.com/volatiletech/sqlboiler/v4 v4.16.2/go.mod h1:B14BPBGTrJ2X6l7lwnvV/iXgYR48+ozGSlzHI3frl6U= github.com/volatiletech/strmangle v0.0.1/go.mod h1:F6RA6IkB5vq0yTG4GQ0UsbbRcl3ni9P76i+JrTBKFFg= -github.com/volatiletech/strmangle v0.0.5 h1:CompJPy+lAi9h+YU/IzBR4X2RDRuAuEIP+kjFdyZXcU= -github.com/volatiletech/strmangle v0.0.5/go.mod h1:ycDvbDkjDvhC0NUU8w3fWwl5JEMTV56vTKXzR3GeR+0= github.com/volatiletech/strmangle v0.0.6 h1:AdOYE3B2ygRDq4rXDij/MMwq6KVK/pWAYxpC7CLrkKQ= github.com/volatiletech/strmangle v0.0.6/go.mod h1:ycDvbDkjDvhC0NUU8w3fWwl5JEMTV56vTKXzR3GeR+0= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= @@ -1173,17 +1033,18 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/ydb-platform/ydb-go-genproto v0.0.0-20231012155159-f85a672542fd h1:dzWP1Lu+A40W883dK/Mr3xyDSM/2MggS8GtHT0qgAnE= -github.com/ydb-platform/ydb-go-genproto v0.0.0-20231012155159-f85a672542fd/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I= -github.com/ydb-platform/ydb-go-sdk/v3 v3.54.2 h1:E0yUuuX7UmPxXm92+yQCjMveLFO3zfvYFIJVuAqsVRA= -github.com/ydb-platform/ydb-go-sdk/v3 v3.54.2/go.mod h1:fjBLQ2TdQNl4bMjuWl9adoTGBypwUTPoGC+EqYqiIcU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20240126124512-dbb0e1720dbf h1:ckwNHVo4bv2tqNkgx3W3HANh3ta1j6TR5qw08J1A7Tw= +github.com/ydb-platform/ydb-go-genproto v0.0.0-20240126124512-dbb0e1720dbf/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I= +github.com/ydb-platform/ydb-go-sdk/v3 v3.55.1 h1:Ebo6J5AMXgJ3A438ECYotA0aK7ETqjQx9WoZvVxzKBE= +github.com/ydb-platform/ydb-go-sdk/v3 v3.55.1/go.mod h1:udNPW8eupyH/EZocecFmaSNJacKKYjzQa7cVgX5U2nc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= @@ -1200,25 +1061,25 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= -go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= -go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY= go.opentelemetry.io/otel v1.23.1/go.mod h1:Td0134eafDLcTS4y+zQ26GE8u3dEuRBiBCTUIRHaikA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/metric v1.23.1 h1:PQJmqJ9u2QaJLBOELl1cxIdPcpbwzbkjfEyelTl2rlo= go.opentelemetry.io/otel/metric v1.23.1/go.mod h1:mpG2QPlAfnK8yNhNJAxDZruU9Y1/HubbC+KyH8FaCWI= -go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= -go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/trace v1.23.1 h1:4LrmmEd8AU2rFvU1zegmvqW7+kWarxtNOPyeL6HmYY8= go.opentelemetry.io/otel/trace v1.23.1/go.mod h1:4IpnpJFwr1mo/6HL8XIPJaE9y0+u1KcVmuW7dwFSVrI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/automaxprocs v1.5.1 h1:e1YG66Lrk73dn4qhg8WFSvhF0JuFQF0ERIp4rpuV8Qk= -go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= -go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1237,21 +1098,15 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1262,8 +1117,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 h1:+iq7lrkxmFNBM7xx+Rae2W6uyPfhPeDWD+n+JgppptE= -golang.org/x/exp v0.0.0-20231219180239-dc181d75b848/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -1292,13 +1145,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1343,10 +1191,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1355,15 +1201,10 @@ golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= 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.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1384,8 +1225,6 @@ golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1401,9 +1240,6 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1471,7 +1307,6 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/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-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1491,7 +1326,6 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1506,23 +1340,17 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1533,9 +1361,7 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1604,13 +1430,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= -golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1747,8 +1568,9 @@ google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014 h1:g/4bk7P6TPMkAUbUhquq98xey1slwvuVJPosdBqYJlU= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9 h1:hZB7eLIaYlW9qXRfCq/qDaPdbeY3757uARz5Vvfv+cY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1781,8 +1603,6 @@ google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ5 google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1800,15 +1620,12 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= 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= @@ -1824,9 +1641,8 @@ gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mN gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= gopkg.in/jcmturner/gokrb5.v7 v7.4.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/redis.v5 v5.2.9/go.mod h1:6gtv0/+A4iM08kdRfocWYB3bLX2tebpNtfKlFT6H4mY= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1839,7 +1655,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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-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= @@ -1909,10 +1724,11 @@ modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/controllers/nft_controller.go b/internal/controllers/nft_controller.go index d56e94ba7..7a96ea766 100644 --- a/internal/controllers/nft_controller.go +++ b/internal/controllers/nft_controller.go @@ -2,6 +2,7 @@ package controllers import ( "bytes" + "context" "database/sql" _ "embed" "fmt" @@ -14,6 +15,7 @@ import ( "github.com/DIMO-Network/devices-api/internal/services/registry" "github.com/DIMO-Network/devices-api/internal/utils" "github.com/DIMO-Network/shared" + "github.com/segmentio/ksuid" "github.com/DIMO-Network/devices-api/internal/config" "github.com/DIMO-Network/devices-api/internal/constants" @@ -21,6 +23,7 @@ import ( "github.com/DIMO-Network/devices-api/internal/services" "github.com/DIMO-Network/devices-api/models" "github.com/DIMO-Network/go-mnemonic" + pb "github.com/DIMO-Network/shared/api/users" "github.com/DIMO-Network/shared/db" pr "github.com/DIMO-Network/shared/middleware/privilegetoken" "github.com/aws/aws-sdk-go-v2/aws" @@ -837,3 +840,206 @@ func (nc *NFTController) GetVinCredential(c *fiber.Ctx) error { c.Set(fiber.HeaderContentType, fiber.MIMEApplicationJSON) return c.Send(nft.R.Claim.Credential.JSON) } + +// GetBurnDevice godoc +// @Description Returns the data the user must sign in order to burn the device. +// @Tags user-devices +// @Param tokenID path int true "token id" +// @Success 200 {object} apitypes.TypedData +// @Security BearerAuth +// @Router /vehicle/:tokenID/commands/burn [get] +func (udc *UserDevicesController) GetBurnDevice(c *fiber.Ctx) error { + tis := c.Params("tokenID") + ti, ok := new(big.Int).SetString(tis, 10) + if !ok { + return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("failed to parse token id %q", tis)) + } + tid := types.NewNullDecimal(new(decimal.Big).SetBigMantScale(ti, 0)) + + client := registry.Client{ + Producer: udc.producer, + RequestTopic: "topic.transaction.request.send", + Contract: registry.Contract{ + ChainID: big.NewInt(udc.Settings.DIMORegistryChainID), + Address: common.HexToAddress(udc.Settings.DIMORegistryAddr), + Name: "DIMO", + Version: "1", + }, + } + + tx, err := udc.DBS().Reader.BeginTx(c.Context(), nil) + if err != nil { + return err + } + defer tx.Rollback() //nolint + + vehicleNFT, err := models.VehicleNFTS( + models.VehicleNFTWhere.TokenID.EQ(tid), + qm.Load(qm.Rels(models.VehicleNFTRels.UserDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.MintRequest)), + qm.Load(qm.Rels(models.VehicleNFTRels.VehicleTokenAftermarketDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.VehicleTokenSyntheticDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.UserDevice, models.UserDeviceRels.UserDeviceAPIIntegrations)), + ).One(c.Context(), tx) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return fiber.NewError(fiber.StatusNotFound, "No command-capable integrations found for this vehicle.") + } + return opaqueInternalError + } + + if vehicleNFT.R.UserDevice == nil { + udc.log.Warn().Msg("no user device associated with NFT") // this should never happen + return opaqueInternalError + } + + bvs, _, err := udc.checkDeviceBurn(c.Context(), vehicleNFT, vehicleNFT.R.UserDevice.UserID) + if err != nil { + return fiber.NewError(fiber.StatusBadRequest, err.Error()) + } + + return c.JSON(client.GetPayload(&bvs)) +} + +// PostBurnDevice godoc +// @Description Sends a burn device request to the blockchain +// @Tags user-devices +// @Param tokenID path int true "token id" +// @Param burnRequest body controllers.BurnRequest true "Signature and Token ID" +// @Success 200 +// @Security BearerAuth +// @Router /vehicle/:tokenID/commands/burn [post] +func (udc *UserDevicesController) PostBurnDevice(c *fiber.Ctx) error { + tis := c.Params("tokenID") + ti, ok := new(big.Int).SetString(tis, 10) + if !ok { + return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("failed to parse token id %q", tis)) + } + tid := types.NewNullDecimal(new(decimal.Big).SetBigMantScale(ti, 0)) + + client := registry.Client{ + Producer: udc.producer, + RequestTopic: "topic.transaction.request.send", + Contract: registry.Contract{ + ChainID: big.NewInt(udc.Settings.DIMORegistryChainID), + Address: common.HexToAddress(udc.Settings.DIMORegistryAddr), + Name: "DIMO", + Version: "1", + }, + } + + tx, err := udc.DBS().Reader.BeginTx(c.Context(), nil) + if err != nil { + return err + } + defer tx.Rollback() //nolint + + vehicleNFT, err := models.VehicleNFTS( + models.VehicleNFTWhere.TokenID.EQ(tid), + qm.Load(qm.Rels(models.VehicleNFTRels.UserDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.MintRequest)), + qm.Load(qm.Rels(models.VehicleNFTRels.VehicleTokenAftermarketDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.VehicleTokenSyntheticDevice)), + qm.Load(qm.Rels(models.VehicleNFTRels.UserDevice, models.UserDeviceRels.UserDeviceAPIIntegrations)), + ).One(c.Context(), tx) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return fiber.NewError(fiber.StatusNotFound, "No command-capable integrations found for this vehicle.") + } + return opaqueInternalError + } + + if vehicleNFT.R.UserDevice == nil { + udc.log.Warn().Msg("no user device associated with NFT") // this should never happen + return opaqueInternalError + } + + bvs, user, err := udc.checkDeviceBurn(c.Context(), vehicleNFT, vehicleNFT.R.UserDevice.UserID) + if err != nil { + return fiber.NewError(fiber.StatusBadRequest, err.Error()) + } + + br := new(BurnRequest) + if err := c.BodyParser(br); err != nil { + return fiber.NewError(fiber.StatusBadRequest, "failed to parse request body") + } + + udc.log.Info(). + Interface("httpRequestBody", br). + Interface("client", client). + Interface("burnVehicleSign", bvs). + Interface("typedData", client.GetPayload(&bvs)). + Msg("Got request.") + + hash, err := client.Hash(&bvs) + if err != nil { + return fmt.Errorf("could not hash bvs: %w", err) + } + + sigBytes := common.FromHex(br.Signature) + recAddr, err := helpers.Ecrecover(hash, sigBytes) + if err != nil { + return err + } + + realAddr := common.HexToAddress(*user.EthereumAddress) + if recAddr != realAddr { + return fiber.NewError(fiber.StatusBadRequest, "signature incorrect") + } + + requestID := ksuid.New().String() + mtr := models.MetaTransactionRequest{ + ID: requestID, + Status: "Unsubmitted", + } + + if err := mtr.Insert(c.Context(), tx, boil.Infer()); err != nil { + return err + } + + vehicleNFT.BurnRequestID = null.StringFrom(requestID) + if _, err := vehicleNFT.Update(c.Context(), tx, boil.Infer()); err != nil { + return err + } + + if err := tx.Commit(); err != nil { + return err + } + + udc.log.Debug().Msgf("submitted metatransaction request %s", requestID) + return client.BurnVehicleSign(requestID, bvs.TokenID, sigBytes) +} + +func (udc *UserDevicesController) checkDeviceBurn(ctx context.Context, vehicleNFT *models.VehicleNFT, userID string) (registry.BurnVehicleSign, *pb.User, error) { + var bvs registry.BurnVehicleSign + if vehicleNFT.R.VehicleTokenAftermarketDevice != nil || vehicleNFT.R.VehicleTokenSyntheticDevice != nil { + return bvs, nil, errors.New("vehicle must be unpaired to burn") + } + + tknID, ok := vehicleNFT.TokenID.Int64() + if !ok { + return bvs, nil, errors.New("failed to parse vehicle token id") + } + + user, err := udc.usersClient.GetUser(ctx, &pb.GetUserRequest{Id: userID}) + if err != nil { + return bvs, nil, fmt.Errorf("failed to get user by id: %w", err) + } + + if user.EthereumAddress == nil { + return bvs, nil, fmt.Errorf("user does not have an Ethereum address on file: %w", err) + } + + bvs = registry.BurnVehicleSign{ + TokenID: big.NewInt(tknID), + } + return bvs, user, nil +} + +// BurnRequest contains the user's signature for the mint request as well as the +// NFT image. +type BurnRequest struct { + TokenID *big.Int `json:"tokenId"` + // Signature is the hex encoding of the EIP-712 signature result. + Signature string `json:"signature" validate:"required"` +} diff --git a/internal/controllers/nft_controller_test.go b/internal/controllers/nft_controller_test.go index 93aa4e7f0..08510d687 100644 --- a/internal/controllers/nft_controller_test.go +++ b/internal/controllers/nft_controller_test.go @@ -3,18 +3,28 @@ package controllers import ( "context" "encoding/hex" + "encoding/json" "fmt" "io" + "math/big" "os" "testing" "time" "github.com/DIMO-Network/devices-api/internal/config" mock_services "github.com/DIMO-Network/devices-api/internal/services/mocks" + "github.com/DIMO-Network/devices-api/internal/services/registry" "github.com/DIMO-Network/devices-api/internal/test" "github.com/DIMO-Network/devices-api/models" + pb "github.com/DIMO-Network/shared/api/users" + smock "github.com/Shopify/sarama/mocks" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + signer "github.com/ethereum/go-ethereum/signer/core/apitypes" "github.com/gofiber/fiber/v2" "github.com/rs/zerolog" + "github.com/segmentio/ksuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tidwall/gjson" @@ -81,3 +91,113 @@ func TestNFTController_GetDcnNFTMetadata(t *testing.T) { assert.Equal(t, "Nodehash", gjson.GetBytes(body, "attributes.5.trait_type").String()) }) } + +func (s *UserDevicesControllerTestSuite) TestGetBurn() { + _, addr, err := test.GenerateWallet() + s.Require().NoError(err) + + email := "some@email.com" + eth := addr.Hex() + ud := models.UserDevice{ + ID: ksuid.New().String(), + UserID: testUserID, + DeviceDefinitionID: ksuid.New().String(), + CountryCode: null.StringFrom("USA"), + Name: null.StringFrom("Chungus"), + VinConfirmed: true, + VinIdentifier: null.StringFrom("4Y1SL65848Z411439"), + } + + err = ud.Insert(context.Background(), s.pdb.DBS().Writer, boil.Infer()) + s.Require().NoError(err) + test.SetupCreateVehicleNFT(s.T(), ud.ID, ud.VinIdentifier.String, big.NewInt(1), null.BytesFrom(addr.Bytes()), s.pdb) + user := test.BuildGetUserGRPC(ud.UserID, &email, ð, &pb.UserReferrer{}) + s.usersClient.EXPECT().GetUser(gomock.Any(), &pb.GetUserRequest{Id: ud.UserID}).Return(user, nil) + + request := test.BuildRequest("GET", fmt.Sprintf("/vehicle/%s/commands/burn", "1"), "") + response, err := s.app.Test(request) + s.Require().NoError(err) + s.Equal(fiber.StatusOK, response.StatusCode) +} + +func (s *UserDevicesControllerTestSuite) TestPostBurn() { + privKey, err := crypto.GenerateKey() + s.Require().NoError(err) + addr := crypto.PubkeyToAddress(privKey.PublicKey) + email := "some@email.com" + eth := addr.Hex() + ud := models.UserDevice{ + ID: ksuid.New().String(), + UserID: testUserID, + DeviceDefinitionID: ksuid.New().String(), + CountryCode: null.StringFrom("USA"), + Name: null.StringFrom("Chungus"), + VinConfirmed: true, + VinIdentifier: null.StringFrom("4Y1SL65848Z411439"), + } + + err = ud.Insert(context.Background(), s.pdb.DBS().Writer, boil.Infer()) + s.Require().NoError(err) + + vnft := test.SetupCreateVehicleNFT(s.T(), ud.ID, ud.VinIdentifier.String, big.NewInt(1), null.BytesFrom(addr.Bytes()), s.pdb) + user := test.BuildGetUserGRPC(ud.UserID, &email, ð, &pb.UserReferrer{}) + s.usersClient.EXPECT().GetUser(gomock.Any(), &pb.GetUserRequest{Id: ud.UserID}).Return(user, nil) + s.usersClient.EXPECT().GetUser(gomock.Any(), &pb.GetUserRequest{Id: ud.UserID}).Return(user, nil) + + sp := smock.NewSyncProducer(s.T(), nil) + sp.ExpectSendMessageAndSucceed() + s.controller.producer = sp + + getRequest := test.BuildRequest("GET", fmt.Sprintf("/vehicle/%s/commands/burn", "1"), "") + getResp, err := s.app.Test(getRequest) + s.Require().NoError(err) + s.Equal(fiber.StatusOK, getResp.StatusCode) + + var td signer.TypedData + s.Require().NoError(json.NewDecoder(getResp.Body).Decode(&td)) + + tkn, ok := vnft.TokenID.Int64() + s.Require().True(ok) + + bvs := registry.BurnVehicleSign{ + TokenID: big.NewInt(int64(tkn)), + } + + client := registry.Client{ + Producer: s.controller.producer, + RequestTopic: "topic.transaction.request.send", + Contract: registry.Contract{ + ChainID: big.NewInt(s.controller.Settings.DIMORegistryChainID), + Address: common.HexToAddress(s.controller.Settings.DIMORegistryAddr), + Name: "DIMO", + Version: "1", + }, + } + + hash, err := client.Hash(&bvs) + s.Require().NoError(err) + + userSig, err := crypto.Sign(hash, privKey) + s.Require().NoError(err) + + userSig[64] += 27 + + br := new(BurnRequest) + br.TokenID = bvs.TokenID + br.Signature = hexutil.Encode(userSig) + + inp, err := json.Marshal(br) + s.Require().NoError(err) + + request := test.BuildRequest("POST", fmt.Sprintf("/vehicle/%s/commands/burn", "1"), string(inp)) + response, err := s.app.Test(request) + s.Require().NoError(err) + s.Equal(fiber.StatusOK, response.StatusCode) + + if err := vnft.Reload(context.Background(), s.pdb.DBS().Reader); err != nil { + s.T().Fatal(err) + } + + s.Require().NotEmpty(vnft.BurnRequestID) + +} diff --git a/internal/controllers/user_devices_controller.go b/internal/controllers/user_devices_controller.go index b9638c68c..5088f6212 100644 --- a/internal/controllers/user_devices_controller.go +++ b/internal/controllers/user_devices_controller.go @@ -14,12 +14,6 @@ import ( "strings" "time" - "github.com/ericlagergren/decimal" - - smartcar "github.com/smartcar/go-sdk" - - "github.com/DIMO-Network/shared/redis" - ddgrpc "github.com/DIMO-Network/device-definitions-api/pkg/grpc" "github.com/DIMO-Network/devices-api/internal/config" "github.com/DIMO-Network/devices-api/internal/constants" @@ -32,27 +26,28 @@ import ( "github.com/DIMO-Network/shared" pb "github.com/DIMO-Network/shared/api/users" "github.com/DIMO-Network/shared/db" + "github.com/DIMO-Network/shared/redis" "github.com/Shopify/sarama" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/ericlagergren/decimal" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + signer "github.com/ethereum/go-ethereum/signer/core/apitypes" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" "github.com/gofiber/fiber/v2" "github.com/pkg/errors" "github.com/rs/zerolog" "github.com/segmentio/ksuid" + smartcar "github.com/smartcar/go-sdk" "github.com/tidwall/gjson" "github.com/volatiletech/null/v8" "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries" "github.com/volatiletech/sqlboiler/v4/queries/qm" "github.com/volatiletech/sqlboiler/v4/types" - - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/service/s3" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - signer "github.com/ethereum/go-ethereum/signer/core/apitypes" ) type UserDevicesController struct { @@ -1410,6 +1405,7 @@ func (udc *UserDevicesController) DeleteUserDevice(c *fiber.Ctx) error { userDevice, err := models.UserDevices( models.UserDeviceWhere.ID.EQ(udi), + qm.Load(models.UserDeviceRels.VehicleNFT), qm.Load(qm.Rels(models.UserDeviceRels.UserDeviceAPIIntegrations, models.UserDeviceAPIIntegrationRels.SerialAftermarketDevice)), ).One(c.Context(), udc.DBS().Reader) if err != nil { @@ -1419,6 +1415,11 @@ func (udc *UserDevicesController) DeleteUserDevice(c *fiber.Ctx) error { return err } + // if vehicle minted, user must delete by burning + if userDevice.R.VehicleNFT != nil { + return fiber.NewError(fiber.StatusFailedDependency, fmt.Sprintf("vehicle token: %d; must burn minted vehicle to delete", userDevice.R.VehicleNFT.TokenID)) + } + dd, err := udc.DeviceDefSvc.GetDeviceDefinitionByID(c.Context(), userDevice.DeviceDefinitionID) if err != nil { return shared.GrpcErrorToFiber(err, "deviceDefSvc error getting definition id: "+userDevice.DeviceDefinitionID) @@ -1437,12 +1438,11 @@ func (udc *UserDevicesController) DeleteUserDevice(c *fiber.Ctx) error { } } - _, err = userDevice.Delete(c.Context(), udc.DBS().Writer) - if err != nil { + if _, err := userDevice.Delete(c.Context(), udc.DBS().Writer); err != nil { return err } - err = udc.eventService.Emit(&shared.CloudEvent[any]{ + if err = udc.eventService.Emit(&shared.CloudEvent[any]{ Type: "com.dimo.zone.device.delete", Subject: userID, Source: "devices-api", @@ -1456,8 +1456,7 @@ func (udc *UserDevicesController) DeleteUserDevice(c *fiber.Ctx) error { Year: int(dd.Type.Year), }, }, - }) - if err != nil { + }); err != nil { return err } diff --git a/internal/controllers/user_devices_controller_test.go b/internal/controllers/user_devices_controller_test.go index 4ef198ffe..f822b8b52 100644 --- a/internal/controllers/user_devices_controller_test.go +++ b/internal/controllers/user_devices_controller_test.go @@ -5,23 +5,13 @@ import ( _ "embed" "encoding/json" "fmt" - dagrpc "github.com/DIMO-Network/device-data-api/pkg/grpc" - "google.golang.org/protobuf/types/known/timestamppb" "io" "math/big" "testing" "time" - "github.com/nats-io/nats-server/v2/server" - - "github.com/google/uuid" - - "github.com/DIMO-Network/shared" - pb "github.com/DIMO-Network/shared/api/users" - "github.com/DIMO-Network/shared/redis/mocks" - - "github.com/DIMO-Network/shared/db" - vrpc "github.com/DIMO-Network/valuations-api/pkg/grpc" + dagrpc "github.com/DIMO-Network/device-data-api/pkg/grpc" + "google.golang.org/protobuf/types/known/timestamppb" ddgrpc "github.com/DIMO-Network/device-definitions-api/pkg/grpc" "github.com/DIMO-Network/devices-api/internal/config" @@ -30,11 +20,18 @@ import ( mock_services "github.com/DIMO-Network/devices-api/internal/services/mocks" "github.com/DIMO-Network/devices-api/internal/test" "github.com/DIMO-Network/devices-api/models" + "github.com/DIMO-Network/shared" + pb "github.com/DIMO-Network/shared/api/users" + "github.com/DIMO-Network/shared/db" + "github.com/DIMO-Network/shared/redis/mocks" + vrpc "github.com/DIMO-Network/valuations-api/pkg/grpc" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" signer "github.com/ethereum/go-ethereum/signer/core/apitypes" "github.com/gofiber/fiber/v2" + "github.com/google/uuid" _ "github.com/lib/pq" + "github.com/nats-io/nats-server/v2/server" "github.com/segmentio/ksuid" smartcar "github.com/smartcar/go-sdk" "github.com/stretchr/testify/assert" @@ -128,6 +125,9 @@ func (s *UserDevicesControllerTestSuite) SetupSuite() { app.Get("/user/devices/:userDeviceID/valuations", test.AuthInjectorTestHandler(s.testUserID), c.GetValuations) app.Get("/user/devices/:userDeviceID/range", test.AuthInjectorTestHandler(s.testUserID), c.GetRange) app.Post("/user/devices/:userDeviceID/commands/refresh", test.AuthInjectorTestHandler(s.testUserID), c.RefreshUserDeviceStatus) + app.Get("/vehicle/:tokenID/commands/burn", test.AuthInjectorTestHandler(s.testUserID), c.GetBurnDevice) + app.Post("/vehicle/:tokenID/commands/burn", test.AuthInjectorTestHandler(s.testUserID), c.PostBurnDevice) + app.Delete("/user/devices/:userDeviceID", test.AuthInjectorTestHandler(s.testUserID), c.DeleteUserDevice) s.controller = &c s.app = app @@ -377,7 +377,7 @@ func (s *UserDevicesControllerTestSuite) TestPostUserDeviceFromVIN() { assert.Equal(s.T(), "6", *regUserResp.Metadata.CANProtocol) assert.EqualValues(s.T(), "ICE", *regUserResp.Metadata.PowertrainType) - msg, responseError := s.natsService.JetStream.GetLastMsg(natsStreamName, s.natsService.ValuationSubject) + msg, responseError := s.natsService.JetStream.GetMsg(natsStreamName, 1) assert.NoError(s.T(), responseError, "expected no error from nats") vinResult := gjson.GetBytes(msg.Data, "vin") assert.Equal(s.T(), vinny, vinResult.Str) @@ -451,7 +451,7 @@ func (s *UserDevicesControllerTestSuite) TestPostUserDeviceFromVIN_SameUser_Dupl assert.Equal(s.T(), integration.Type, regUserResp.DeviceDefinition.CompatibleIntegrations[0].Type) assert.Equal(s.T(), integration.Id, regUserResp.DeviceDefinition.CompatibleIntegrations[0].ID) - msg, responseError := s.natsService.JetStream.GetLastMsg(natsStreamName, s.natsService.ValuationSubject) + msg, responseError := s.natsService.JetStream.GetMsg(natsStreamName, 1) assert.NoError(s.T(), responseError, "expected no error from nats") vinResult := gjson.GetBytes(msg.Data, "vin") assert.Equal(s.T(), vinny, vinResult.Str) @@ -1049,3 +1049,35 @@ func TestEIP712Hash(t *testing.T) { assert.Equal(t, realHash, hash) } } + +func (s *UserDevicesControllerTestSuite) TestDeleteUserDevice_ErrNFTNotBurned() { + _, addr, err := test.GenerateWallet() + s.Require().NoError(err) + + ud := models.UserDevice{ + ID: ksuid.New().String(), + UserID: testUserID, + DeviceDefinitionID: ksuid.New().String(), + CountryCode: null.StringFrom("USA"), + Name: null.StringFrom("Chungus"), + VinConfirmed: true, + VinIdentifier: null.StringFrom("4Y1SL65848Z411439"), + } + + err = ud.Insert(context.Background(), s.pdb.DBS().Writer, boil.Infer()) + s.Require().NoError(err) + test.SetupCreateVehicleNFT(s.T(), ud.ID, ud.VinIdentifier.String, big.NewInt(1), null.BytesFrom(addr.Bytes()), s.pdb) + + request := test.BuildRequest("DELETE", "/user/devices/"+ud.ID, "") + response, err := s.app.Test(request) + s.Require().NoError(err) + body, _ := io.ReadAll(response.Body) + + var resp map[string]interface{} + err = json.Unmarshal(body, &resp) + s.Require().NoError(err) + + s.Equal(fiber.StatusFailedDependency, response.StatusCode) + s.Equal(resp["message"].(string), fmt.Sprintf("vehicle token: %d; must burn minted vehicle to delete", big.NewInt(1))) + +} diff --git a/internal/controllers/user_integrations_controller.go b/internal/controllers/user_integrations_controller.go index b709df64a..b11511e74 100644 --- a/internal/controllers/user_integrations_controller.go +++ b/internal/controllers/user_integrations_controller.go @@ -11,7 +11,6 @@ import ( "time" "github.com/go-redis/redis/v8" - smartcar "github.com/smartcar/go-sdk" ddgrpc "github.com/DIMO-Network/device-definitions-api/pkg/grpc" diff --git a/internal/services/autopi_api_service_test.go b/internal/services/autopi_api_service_test.go index 2a8d0c267..9b31faea5 100644 --- a/internal/services/autopi_api_service_test.go +++ b/internal/services/autopi_api_service_test.go @@ -143,7 +143,7 @@ func (s *AutoPiAPIServiceTestSuite) TestGetDeviceByUnitID_Should_Be_NotFound() { _, err := autoPiSvc.GetDeviceByUnitID(unitID) // assert - require.ErrorIs(s.T(), err, ErrNotFound) + require.Error(s.T(), err) } func TestBuildCallName(t *testing.T) { diff --git a/internal/services/contracts_events_consumer.go b/internal/services/contracts_events_consumer.go index 439c1be75..721ed3d19 100644 --- a/internal/services/contracts_events_consumer.go +++ b/internal/services/contracts_events_consumer.go @@ -63,6 +63,7 @@ const ( AftermarketDeviceUnpaired EventName = "AftermarketDeviceUnpaired" AftermarketDeviceAttributeSet EventName = "AftermarketDeviceAttributeSet" AftermarketDeviceAddressReset EventName = "AftermarketDeviceAddressReset" + VehicleNodeBurned EventName = "VehicleNodeBurned" ) func (r EventName) String() string { @@ -126,7 +127,6 @@ func (c *ContractsEventsConsumer) processEvent(_ context.Context, event *shared. } var data ContractEventData - if err := json.Unmarshal(event.Data, &data); err != nil { return err } @@ -170,6 +170,8 @@ func (c *ContractsEventsConsumer) processEvent(_ context.Context, event *shared. return c.aftermarketDeviceAttributeSet(&data) case AftermarketDeviceAddressReset.String(): return c.aftermarketDeviceAddressReset(&data) + case VehicleNodeBurned.String(): + return c.vehicleNodeBurned(&data) default: c.log.Debug().Str("event", data.EventName).Msg("Handler not provided for event.") } @@ -722,6 +724,56 @@ func (c *ContractsEventsConsumer) aftermarketDeviceAddressReset(e *ContractEvent return err } +// vehicleNodeBurned handles the event of the same name from the registry contract. +func (c *ContractsEventsConsumer) vehicleNodeBurned(e *ContractEventData) error { + ctx := context.Background() + if e.ChainID != c.settings.DIMORegistryChainID || e.Contract != common.HexToAddress(c.settings.DIMORegistryAddr) { + return fmt.Errorf("vehicle burn from unexpected source %d/%s", e.ChainID, e.Contract) + } + + var args contracts.RegistryVehicleNodeBurned + if err := json.Unmarshal(e.Arguments, &args); err != nil { + return err + } + + tx, err := c.db.DBS().Reader.BeginTx(ctx, nil) + if err != nil { + return err + } + defer tx.Rollback() //nolint + + vnft, err := models.VehicleNFTS( + models.VehicleNFTWhere.TokenID.EQ( + types.NewNullDecimal(new(decimal.Big).SetBigMantScale(args.VehicleNode, 0))), + qm.Load(models.VehicleNFTRels.UserDevice), + qm.Load(models.VehicleNFTRels.BurnRequest), + ).One(ctx, tx) + if err != nil { + return err + } + + if _, err := vnft.Delete(ctx, tx); err != nil { + return err + } + + if ud := vnft.R.UserDevice; ud != nil { + if _, err := ud.Delete(ctx, tx); err != nil { + return err + } + } + + if mtr := vnft.R.BurnRequest; mtr != nil { + mtr.Hash = null.BytesFrom(e.TransactionHash.Bytes()) + mtr.Status = models.MetaTransactionRequestStatusConfirmed + if _, err := mtr.Update(ctx, tx, boil.Infer()); err != nil { + return err + } + } + + c.log.Info().Int64("tokenID", args.VehicleNode.Int64()).Msg("burning vehicle node") + return tx.Commit() +} + // DCNNameChangedContract represents a NameChanged event raised by the FullAbi contract. // Could not use abigen struct because it did not consider the underscore in the name property for serialization type DCNNameChangedContract struct { diff --git a/internal/services/contracts_events_consumer_test.go b/internal/services/contracts_events_consumer_test.go index a2dfc1524..4015783ad 100644 --- a/internal/services/contracts_events_consumer_test.go +++ b/internal/services/contracts_events_consumer_test.go @@ -2,6 +2,7 @@ package services import ( "context" + "database/sql" "encoding/json" "fmt" "math/big" @@ -10,6 +11,7 @@ import ( "time" "github.com/DIMO-Network/devices-api/internal/contracts" + "github.com/segmentio/ksuid" "github.com/volatiletech/null/v8" "github.com/volatiletech/sqlboiler/v4/boil" @@ -757,6 +759,135 @@ func privilegeEventsPayloadFactory(from, to int, eventName string, exp int64, dI return res } +func Test_VehicleNodeBurn_MetaTxID(t *testing.T) { + ctx := context.Background() + pdb, container := test.StartContainerDatabase(ctx, t, migrationsDirRelPath) + defer container.Terminate(ctx) //nolint + + logger := zerolog.Nop() + settings := &config.Settings{DIMORegistryChainID: 1, DIMORegistryAddr: "0x881d40237659c251811cec9c364ef91dc08d300c"} + + ud := models.UserDevice{ + ID: ksuid.New().String(), + UserID: ksuid.New().String(), + DeviceDefinitionID: ksuid.New().String(), + } + assert.NoError(t, ud.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + mintReq := models.MetaTransactionRequest{ + ID: ksuid.New().String(), + Status: models.MetaTransactionRequestStatusConfirmed, + } + assert.NoError(t, mintReq.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + burnReq := models.MetaTransactionRequest{ + ID: ksuid.New().String(), + Status: models.MetaTransactionRequestStatusMined, + } + assert.NoError(t, burnReq.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + vnft := models.VehicleNFT{ + MintRequestID: mintReq.ID, + BurnRequestID: null.StringFrom(burnReq.ID), + UserDeviceID: null.StringFrom(ud.ID), + TokenID: types.NewNullDecimal(decimal.New(13, 0)), + Vin: "vin", + } + assert.NoError(t, vnft.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + consumer := NewContractsEventsConsumer(pdb, &logger, settings, nil, nil, nil) + + event, err := marshalMockPayload(fmt.Sprintf(`{ + "type": "zone.dimo.contract.event", + "source": "chain/%d", + "data": { + "contract": "%s", + "eventName": "%s", + "chainId": %d, + "arguments": { + "vehicleNode": 13, + "owner": "%s" + } + } + }`, + settings.DIMORegistryChainID, + settings.DIMORegistryAddr, + VehicleNodeBurned.String(), + settings.DIMORegistryChainID, common.BigToAddress(big.NewInt(1)))) + assert.NoError(t, err) + + err = consumer.processEvent(ctx, event) + if err != nil { + t.Errorf("failed to process event: %v", err) + } + + assert.NoError(t, burnReq.Reload(ctx, pdb.DBS().Reader)) + assert.Equal(t, models.MetaTransactionRequestStatusConfirmed, burnReq.Status) + assert.NotNil(t, burnReq.Hash) + + assert.ErrorIs(t, vnft.Reload(ctx, pdb.DBS().Reader), sql.ErrNoRows) + assert.ErrorIs(t, ud.Reload(ctx, pdb.DBS().Reader), sql.ErrNoRows) +} + +func Test_VehicleNodeBurn_NoMetaTxID(t *testing.T) { + ctx := context.Background() + pdb, container := test.StartContainerDatabase(ctx, t, migrationsDirRelPath) + defer container.Terminate(ctx) //nolint + + logger := zerolog.Nop() + settings := &config.Settings{DIMORegistryChainID: 1, DIMORegistryAddr: "0x881d40237659c251811cec9c364ef91dc08d300c"} + + ud := models.UserDevice{ + ID: ksuid.New().String(), + UserID: ksuid.New().String(), + DeviceDefinitionID: ksuid.New().String(), + } + assert.NoError(t, ud.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + mintReq := models.MetaTransactionRequest{ + ID: ksuid.New().String(), + Status: models.MetaTransactionRequestStatusConfirmed, + } + assert.NoError(t, mintReq.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + vnft := models.VehicleNFT{ + MintRequestID: mintReq.ID, + UserDeviceID: null.StringFrom(ud.ID), + TokenID: types.NewNullDecimal(decimal.New(13, 0)), + Vin: "vin", + } + assert.NoError(t, vnft.Insert(context.TODO(), pdb.DBS().Writer, boil.Infer())) + + consumer := NewContractsEventsConsumer(pdb, &logger, settings, nil, nil, nil) + + event, err := marshalMockPayload(fmt.Sprintf(`{ + "type": "zone.dimo.contract.event", + "source": "chain/%d", + "data": { + "contract": "%s", + "eventName": "%s", + "chainId": %d, + "arguments": { + "vehicleNode": 13, + "owner": "%s" + } + } + }`, + settings.DIMORegistryChainID, + settings.DIMORegistryAddr, + VehicleNodeBurned.String(), + settings.DIMORegistryChainID, common.BigToAddress(big.NewInt(1)))) + assert.NoError(t, err) + + err = consumer.processEvent(ctx, event) + if err != nil { + t.Errorf("failed to process event: %v", err) + } + + assert.ErrorIs(t, vnft.Reload(ctx, pdb.DBS().Reader), sql.ErrNoRows) + assert.ErrorIs(t, ud.Reload(ctx, pdb.DBS().Reader), sql.ErrNoRows) +} + func initCEventsTestHelper(t *testing.T) cEventsTestHelper { ctx := context.Background() pdb, container := test.StartContainerDatabase(ctx, t, migrationsDirRelPath) diff --git a/internal/services/registry/client.go b/internal/services/registry/client.go index 820b5a3d6..9e9708c09 100644 --- a/internal/services/registry/client.go +++ b/internal/services/registry/client.go @@ -75,6 +75,27 @@ func (m *MintVehicleSign) Message() signer.TypedDataMessage { } } +// BurnVehicleSign(uint256 tokenID) +type BurnVehicleSign struct { + TokenID *big.Int +} + +func (b *BurnVehicleSign) Name() string { + return "BurnVehicleSign" +} + +func (b *BurnVehicleSign) Type() []signer.Type { + return []signer.Type{ + {Name: "tokenId", Type: "uint256"}, + } +} + +func (b *BurnVehicleSign) Message() signer.TypedDataMessage { + return signer.TypedDataMessage{ + "tokenId": b.TokenID, + } +} + // ClaimAftermarketDeviceSign(uint256 aftermarketDeviceNode,address owner) type ClaimAftermarketDeviceSign struct { AftermarketDeviceNode *big.Int @@ -311,6 +332,21 @@ func (c *Client) MintVehicleAndSDign(requestID string, data contracts.MintVehicl return c.sendRequest(requestID, callData) } +// BurnVehicleSign(uint256 tokenID, bytes signature) +func (c *Client) BurnVehicleSign(requestID string, tokenID *big.Int, signature []byte) error { + abi, err := contracts.RegistryMetaData.GetAbi() + if err != nil { + return err + } + + data, err := abi.Pack("burnVehicleSign", tokenID, signature) + if err != nil { + return err + } + + return c.sendRequest(requestID, data) +} + func (c *Client) sendRequest(requestID string, data []byte) error { event := shared.CloudEvent[RequestData]{ ID: ksuid.New().String(), diff --git a/internal/services/registry/storage.go b/internal/services/registry/storage.go index 7bd62bf79..72870d63f 100644 --- a/internal/services/registry/storage.go +++ b/internal/services/registry/storage.go @@ -48,6 +48,7 @@ func (p *proc) Handle(ctx context.Context, data *ceData) error { models.MetaTransactionRequestWhere.ID.EQ(data.RequestID), // This is really ugly. We should probably link back to the type instead of doing this. qm.Load(qm.Rels(models.MetaTransactionRequestRels.MintRequestVehicleNFT, models.VehicleNFTRels.UserDevice)), + qm.Load(qm.Rels(models.MetaTransactionRequestRels.BurnRequestVehicleNFT, models.VehicleNFTRels.UserDevice)), qm.Load(models.MetaTransactionRequestRels.ClaimMetaTransactionRequestAftermarketDevice), qm.Load(models.MetaTransactionRequestRels.PairRequestAftermarketDevice), qm.Load(models.MetaTransactionRequestRels.UnpairRequestAftermarketDevice), @@ -138,6 +139,8 @@ func (p *proc) Handle(ctx context.Context, data *ceData) error { } } } + case mtr.R.BurnRequestVehicleNFT != nil: + // Handled in contract event consumer. case mtr.R.ClaimMetaTransactionRequestAftermarketDevice != nil: // Handled in the contract event consumer. case mtr.R.PairRequestAftermarketDevice != nil: diff --git a/migrations/20240305100739_rename_col_vnft_mint_req.sql b/migrations/20240305100739_rename_col_vnft_mint_req.sql new file mode 100644 index 000000000..f2ffeb5a9 --- /dev/null +++ b/migrations/20240305100739_rename_col_vnft_mint_req.sql @@ -0,0 +1,20 @@ +-- +goose Up +-- +goose StatementBegin +SELECT 'up SQL query'; + +ALTER TABLE vehicle_nfts ADD COLUMN burn_request_id CHAR(27); + +ALTER TABLE vehicle_nfts ADD CONSTRAINT vehicle_nfts_burn_request_id_key UNIQUE (burn_request_id); +ALTER TABLE vehicle_nfts ADD CONSTRAINT vehicle_nfts_burn_request_id_fkey FOREIGN KEY (burn_request_id) REFERENCES meta_transaction_requests(id); + +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +SELECT 'down SQL query'; + +ALTER TABLE vehicle_nfts DROP CONSTRAINT vehicle_nfts_burn_request_id_fkey; +ALTER TABLE vehicle_nfts DROP CONSTRAINT vehicle_nfts_burn_request_id_key; + +ALTER TABLE vehicle_nfts DROP COLUMN burn_request_id; +-- +goose StatementEnd diff --git a/models/meta_transaction_requests.go b/models/meta_transaction_requests.go index a6b4a18f8..a5c50da2b 100644 --- a/models/meta_transaction_requests.go +++ b/models/meta_transaction_requests.go @@ -85,6 +85,7 @@ var MetaTransactionRequestRels = struct { UnpairRequestAftermarketDevice string MintRequestSyntheticDevice string BurnRequestSyntheticDevice string + BurnRequestVehicleNFT string MintRequestVehicleNFT string }{ ClaimMetaTransactionRequestAftermarketDevice: "ClaimMetaTransactionRequestAftermarketDevice", @@ -92,6 +93,7 @@ var MetaTransactionRequestRels = struct { UnpairRequestAftermarketDevice: "UnpairRequestAftermarketDevice", MintRequestSyntheticDevice: "MintRequestSyntheticDevice", BurnRequestSyntheticDevice: "BurnRequestSyntheticDevice", + BurnRequestVehicleNFT: "BurnRequestVehicleNFT", MintRequestVehicleNFT: "MintRequestVehicleNFT", } @@ -102,6 +104,7 @@ type metaTransactionRequestR struct { UnpairRequestAftermarketDevice *AftermarketDevice `boil:"UnpairRequestAftermarketDevice" json:"UnpairRequestAftermarketDevice" toml:"UnpairRequestAftermarketDevice" yaml:"UnpairRequestAftermarketDevice"` MintRequestSyntheticDevice *SyntheticDevice `boil:"MintRequestSyntheticDevice" json:"MintRequestSyntheticDevice" toml:"MintRequestSyntheticDevice" yaml:"MintRequestSyntheticDevice"` BurnRequestSyntheticDevice *SyntheticDevice `boil:"BurnRequestSyntheticDevice" json:"BurnRequestSyntheticDevice" toml:"BurnRequestSyntheticDevice" yaml:"BurnRequestSyntheticDevice"` + BurnRequestVehicleNFT *VehicleNFT `boil:"BurnRequestVehicleNFT" json:"BurnRequestVehicleNFT" toml:"BurnRequestVehicleNFT" yaml:"BurnRequestVehicleNFT"` MintRequestVehicleNFT *VehicleNFT `boil:"MintRequestVehicleNFT" json:"MintRequestVehicleNFT" toml:"MintRequestVehicleNFT" yaml:"MintRequestVehicleNFT"` } @@ -145,6 +148,13 @@ func (r *metaTransactionRequestR) GetBurnRequestSyntheticDevice() *SyntheticDevi return r.BurnRequestSyntheticDevice } +func (r *metaTransactionRequestR) GetBurnRequestVehicleNFT() *VehicleNFT { + if r == nil { + return nil + } + return r.BurnRequestVehicleNFT +} + func (r *metaTransactionRequestR) GetMintRequestVehicleNFT() *VehicleNFT { if r == nil { return nil @@ -496,6 +506,17 @@ func (o *MetaTransactionRequest) BurnRequestSyntheticDevice(mods ...qm.QueryMod) return SyntheticDevices(queryMods...) } +// BurnRequestVehicleNFT pointed to by the foreign key. +func (o *MetaTransactionRequest) BurnRequestVehicleNFT(mods ...qm.QueryMod) vehicleNFTQuery { + queryMods := []qm.QueryMod{ + qm.Where("\"burn_request_id\" = ?", o.ID), + } + + queryMods = append(queryMods, mods...) + + return VehicleNFTS(queryMods...) +} + // MintRequestVehicleNFT pointed to by the foreign key. func (o *MetaTransactionRequest) MintRequestVehicleNFT(mods ...qm.QueryMod) vehicleNFTQuery { queryMods := []qm.QueryMod{ @@ -1092,6 +1113,123 @@ func (metaTransactionRequestL) LoadBurnRequestSyntheticDevice(ctx context.Contex return nil } +// LoadBurnRequestVehicleNFT allows an eager lookup of values, cached into the +// loaded structs of the objects. This is for a 1-1 relationship. +func (metaTransactionRequestL) LoadBurnRequestVehicleNFT(ctx context.Context, e boil.ContextExecutor, singular bool, maybeMetaTransactionRequest interface{}, mods queries.Applicator) error { + var slice []*MetaTransactionRequest + var object *MetaTransactionRequest + + if singular { + var ok bool + object, ok = maybeMetaTransactionRequest.(*MetaTransactionRequest) + if !ok { + object = new(MetaTransactionRequest) + ok = queries.SetFromEmbeddedStruct(&object, &maybeMetaTransactionRequest) + if !ok { + return errors.New(fmt.Sprintf("failed to set %T from embedded struct %T", object, maybeMetaTransactionRequest)) + } + } + } else { + s, ok := maybeMetaTransactionRequest.(*[]*MetaTransactionRequest) + if ok { + slice = *s + } else { + ok = queries.SetFromEmbeddedStruct(&slice, maybeMetaTransactionRequest) + if !ok { + return errors.New(fmt.Sprintf("failed to set %T from embedded struct %T", slice, maybeMetaTransactionRequest)) + } + } + } + + args := make([]interface{}, 0, 1) + if singular { + if object.R == nil { + object.R = &metaTransactionRequestR{} + } + args = append(args, object.ID) + } else { + Outer: + for _, obj := range slice { + if obj.R == nil { + obj.R = &metaTransactionRequestR{} + } + + for _, a := range args { + if queries.Equal(a, obj.ID) { + continue Outer + } + } + + args = append(args, obj.ID) + } + } + + if len(args) == 0 { + return nil + } + + query := NewQuery( + qm.From(`devices_api.vehicle_nfts`), + qm.WhereIn(`devices_api.vehicle_nfts.burn_request_id in ?`, args...), + ) + if mods != nil { + mods.Apply(query) + } + + results, err := query.QueryContext(ctx, e) + if err != nil { + return errors.Wrap(err, "failed to eager load VehicleNFT") + } + + var resultSlice []*VehicleNFT + if err = queries.Bind(results, &resultSlice); err != nil { + return errors.Wrap(err, "failed to bind eager loaded slice VehicleNFT") + } + + if err = results.Close(); err != nil { + return errors.Wrap(err, "failed to close results of eager load for vehicle_nfts") + } + if err = results.Err(); err != nil { + return errors.Wrap(err, "error occurred during iteration of eager loaded relations for vehicle_nfts") + } + + if len(vehicleNFTAfterSelectHooks) != 0 { + for _, obj := range resultSlice { + if err := obj.doAfterSelectHooks(ctx, e); err != nil { + return err + } + } + } + + if len(resultSlice) == 0 { + return nil + } + + if singular { + foreign := resultSlice[0] + object.R.BurnRequestVehicleNFT = foreign + if foreign.R == nil { + foreign.R = &vehicleNFTR{} + } + foreign.R.BurnRequest = object + } + + for _, local := range slice { + for _, foreign := range resultSlice { + if queries.Equal(local.ID, foreign.BurnRequestID) { + local.R.BurnRequestVehicleNFT = foreign + if foreign.R == nil { + foreign.R = &vehicleNFTR{} + } + foreign.R.BurnRequest = local + break + } + } + } + + return nil +} + // LoadMintRequestVehicleNFT allows an eager lookup of values, cached into the // loaded structs of the objects. This is for a 1-1 relationship. func (metaTransactionRequestL) LoadMintRequestVehicleNFT(ctx context.Context, e boil.ContextExecutor, singular bool, maybeMetaTransactionRequest interface{}, mods queries.Applicator) error { @@ -1555,6 +1693,80 @@ func (o *MetaTransactionRequest) RemoveBurnRequestSyntheticDevice(ctx context.Co return nil } +// SetBurnRequestVehicleNFT of the metaTransactionRequest to the related item. +// Sets o.R.BurnRequestVehicleNFT to related. +// Adds o to related.R.BurnRequest. +func (o *MetaTransactionRequest) SetBurnRequestVehicleNFT(ctx context.Context, exec boil.ContextExecutor, insert bool, related *VehicleNFT) error { + var err error + + if insert { + queries.Assign(&related.BurnRequestID, o.ID) + + if err = related.Insert(ctx, exec, boil.Infer()); err != nil { + return errors.Wrap(err, "failed to insert into foreign table") + } + } else { + updateQuery := fmt.Sprintf( + "UPDATE \"devices_api\".\"vehicle_nfts\" SET %s WHERE %s", + strmangle.SetParamNames("\"", "\"", 1, []string{"burn_request_id"}), + strmangle.WhereClause("\"", "\"", 2, vehicleNFTPrimaryKeyColumns), + ) + values := []interface{}{o.ID, related.MintRequestID} + + if boil.IsDebug(ctx) { + writer := boil.DebugWriterFrom(ctx) + fmt.Fprintln(writer, updateQuery) + fmt.Fprintln(writer, values) + } + if _, err = exec.ExecContext(ctx, updateQuery, values...); err != nil { + return errors.Wrap(err, "failed to update foreign table") + } + + queries.Assign(&related.BurnRequestID, o.ID) + } + + if o.R == nil { + o.R = &metaTransactionRequestR{ + BurnRequestVehicleNFT: related, + } + } else { + o.R.BurnRequestVehicleNFT = related + } + + if related.R == nil { + related.R = &vehicleNFTR{ + BurnRequest: o, + } + } else { + related.R.BurnRequest = o + } + return nil +} + +// RemoveBurnRequestVehicleNFT relationship. +// Sets o.R.BurnRequestVehicleNFT to nil. +// Removes o from all passed in related items' relationships struct. +func (o *MetaTransactionRequest) RemoveBurnRequestVehicleNFT(ctx context.Context, exec boil.ContextExecutor, related *VehicleNFT) error { + var err error + + queries.SetScanner(&related.BurnRequestID, nil) + if _, err = related.Update(ctx, exec, boil.Whitelist("burn_request_id")); err != nil { + return errors.Wrap(err, "failed to update local table") + } + + if o.R != nil { + o.R.BurnRequestVehicleNFT = nil + } + + if related == nil || related.R == nil { + return nil + } + + related.R.BurnRequest = nil + + return nil +} + // SetMintRequestVehicleNFT of the metaTransactionRequest to the related item. // Sets o.R.MintRequestVehicleNFT to related. // Adds o to related.R.MintRequest. diff --git a/models/vehicle_nfts.go b/models/vehicle_nfts.go index 2d4c3918e..b8ad228e0 100644 --- a/models/vehicle_nfts.go +++ b/models/vehicle_nfts.go @@ -31,6 +31,7 @@ type VehicleNFT struct { TokenID types.NullDecimal `boil:"token_id" json:"token_id,omitempty" toml:"token_id" yaml:"token_id,omitempty"` OwnerAddress null.Bytes `boil:"owner_address" json:"owner_address,omitempty" toml:"owner_address" yaml:"owner_address,omitempty"` ClaimID null.String `boil:"claim_id" json:"claim_id,omitempty" toml:"claim_id" yaml:"claim_id,omitempty"` + BurnRequestID null.String `boil:"burn_request_id" json:"burn_request_id,omitempty" toml:"burn_request_id" yaml:"burn_request_id,omitempty"` R *vehicleNFTR `boil:"-" json:"-" toml:"-" yaml:"-"` L vehicleNFTL `boil:"-" json:"-" toml:"-" yaml:"-"` @@ -43,6 +44,7 @@ var VehicleNFTColumns = struct { TokenID string OwnerAddress string ClaimID string + BurnRequestID string }{ MintRequestID: "mint_request_id", UserDeviceID: "user_device_id", @@ -50,6 +52,7 @@ var VehicleNFTColumns = struct { TokenID: "token_id", OwnerAddress: "owner_address", ClaimID: "claim_id", + BurnRequestID: "burn_request_id", } var VehicleNFTTableColumns = struct { @@ -59,6 +62,7 @@ var VehicleNFTTableColumns = struct { TokenID string OwnerAddress string ClaimID string + BurnRequestID string }{ MintRequestID: "vehicle_nfts.mint_request_id", UserDeviceID: "vehicle_nfts.user_device_id", @@ -66,6 +70,7 @@ var VehicleNFTTableColumns = struct { TokenID: "vehicle_nfts.token_id", OwnerAddress: "vehicle_nfts.owner_address", ClaimID: "vehicle_nfts.claim_id", + BurnRequestID: "vehicle_nfts.burn_request_id", } // Generated where @@ -77,6 +82,7 @@ var VehicleNFTWhere = struct { TokenID whereHelpertypes_NullDecimal OwnerAddress whereHelpernull_Bytes ClaimID whereHelpernull_String + BurnRequestID whereHelpernull_String }{ MintRequestID: whereHelperstring{field: "\"devices_api\".\"vehicle_nfts\".\"mint_request_id\""}, UserDeviceID: whereHelpernull_String{field: "\"devices_api\".\"vehicle_nfts\".\"user_device_id\""}, @@ -84,16 +90,19 @@ var VehicleNFTWhere = struct { TokenID: whereHelpertypes_NullDecimal{field: "\"devices_api\".\"vehicle_nfts\".\"token_id\""}, OwnerAddress: whereHelpernull_Bytes{field: "\"devices_api\".\"vehicle_nfts\".\"owner_address\""}, ClaimID: whereHelpernull_String{field: "\"devices_api\".\"vehicle_nfts\".\"claim_id\""}, + BurnRequestID: whereHelpernull_String{field: "\"devices_api\".\"vehicle_nfts\".\"burn_request_id\""}, } // VehicleNFTRels is where relationship names are stored. var VehicleNFTRels = struct { + BurnRequest string Claim string MintRequest string UserDevice string VehicleTokenAftermarketDevice string VehicleTokenSyntheticDevice string }{ + BurnRequest: "BurnRequest", Claim: "Claim", MintRequest: "MintRequest", UserDevice: "UserDevice", @@ -103,6 +112,7 @@ var VehicleNFTRels = struct { // vehicleNFTR is where relationships are stored. type vehicleNFTR struct { + BurnRequest *MetaTransactionRequest `boil:"BurnRequest" json:"BurnRequest" toml:"BurnRequest" yaml:"BurnRequest"` Claim *VerifiableCredential `boil:"Claim" json:"Claim" toml:"Claim" yaml:"Claim"` MintRequest *MetaTransactionRequest `boil:"MintRequest" json:"MintRequest" toml:"MintRequest" yaml:"MintRequest"` UserDevice *UserDevice `boil:"UserDevice" json:"UserDevice" toml:"UserDevice" yaml:"UserDevice"` @@ -115,6 +125,13 @@ func (*vehicleNFTR) NewStruct() *vehicleNFTR { return &vehicleNFTR{} } +func (r *vehicleNFTR) GetBurnRequest() *MetaTransactionRequest { + if r == nil { + return nil + } + return r.BurnRequest +} + func (r *vehicleNFTR) GetClaim() *VerifiableCredential { if r == nil { return nil @@ -154,9 +171,9 @@ func (r *vehicleNFTR) GetVehicleTokenSyntheticDevice() *SyntheticDevice { type vehicleNFTL struct{} var ( - vehicleNFTAllColumns = []string{"mint_request_id", "user_device_id", "vin", "token_id", "owner_address", "claim_id"} + vehicleNFTAllColumns = []string{"mint_request_id", "user_device_id", "vin", "token_id", "owner_address", "claim_id", "burn_request_id"} vehicleNFTColumnsWithoutDefault = []string{"mint_request_id", "vin"} - vehicleNFTColumnsWithDefault = []string{"user_device_id", "token_id", "owner_address", "claim_id"} + vehicleNFTColumnsWithDefault = []string{"user_device_id", "token_id", "owner_address", "claim_id", "burn_request_id"} vehicleNFTPrimaryKeyColumns = []string{"mint_request_id"} vehicleNFTGeneratedColumns = []string{} ) @@ -439,6 +456,17 @@ func (q vehicleNFTQuery) Exists(ctx context.Context, exec boil.ContextExecutor) return count > 0, nil } +// BurnRequest pointed to by the foreign key. +func (o *VehicleNFT) BurnRequest(mods ...qm.QueryMod) metaTransactionRequestQuery { + queryMods := []qm.QueryMod{ + qm.Where("\"id\" = ?", o.BurnRequestID), + } + + queryMods = append(queryMods, mods...) + + return MetaTransactionRequests(queryMods...) +} + // Claim pointed to by the foreign key. func (o *VehicleNFT) Claim(mods ...qm.QueryMod) verifiableCredentialQuery { queryMods := []qm.QueryMod{ @@ -494,6 +522,130 @@ func (o *VehicleNFT) VehicleTokenSyntheticDevice(mods ...qm.QueryMod) syntheticD return SyntheticDevices(queryMods...) } +// LoadBurnRequest allows an eager lookup of values, cached into the +// loaded structs of the objects. This is for an N-1 relationship. +func (vehicleNFTL) LoadBurnRequest(ctx context.Context, e boil.ContextExecutor, singular bool, maybeVehicleNFT interface{}, mods queries.Applicator) error { + var slice []*VehicleNFT + var object *VehicleNFT + + if singular { + var ok bool + object, ok = maybeVehicleNFT.(*VehicleNFT) + if !ok { + object = new(VehicleNFT) + ok = queries.SetFromEmbeddedStruct(&object, &maybeVehicleNFT) + if !ok { + return errors.New(fmt.Sprintf("failed to set %T from embedded struct %T", object, maybeVehicleNFT)) + } + } + } else { + s, ok := maybeVehicleNFT.(*[]*VehicleNFT) + if ok { + slice = *s + } else { + ok = queries.SetFromEmbeddedStruct(&slice, maybeVehicleNFT) + if !ok { + return errors.New(fmt.Sprintf("failed to set %T from embedded struct %T", slice, maybeVehicleNFT)) + } + } + } + + args := make([]interface{}, 0, 1) + if singular { + if object.R == nil { + object.R = &vehicleNFTR{} + } + if !queries.IsNil(object.BurnRequestID) { + args = append(args, object.BurnRequestID) + } + + } else { + Outer: + for _, obj := range slice { + if obj.R == nil { + obj.R = &vehicleNFTR{} + } + + for _, a := range args { + if queries.Equal(a, obj.BurnRequestID) { + continue Outer + } + } + + if !queries.IsNil(obj.BurnRequestID) { + args = append(args, obj.BurnRequestID) + } + + } + } + + if len(args) == 0 { + return nil + } + + query := NewQuery( + qm.From(`devices_api.meta_transaction_requests`), + qm.WhereIn(`devices_api.meta_transaction_requests.id in ?`, args...), + ) + if mods != nil { + mods.Apply(query) + } + + results, err := query.QueryContext(ctx, e) + if err != nil { + return errors.Wrap(err, "failed to eager load MetaTransactionRequest") + } + + var resultSlice []*MetaTransactionRequest + if err = queries.Bind(results, &resultSlice); err != nil { + return errors.Wrap(err, "failed to bind eager loaded slice MetaTransactionRequest") + } + + if err = results.Close(); err != nil { + return errors.Wrap(err, "failed to close results of eager load for meta_transaction_requests") + } + if err = results.Err(); err != nil { + return errors.Wrap(err, "error occurred during iteration of eager loaded relations for meta_transaction_requests") + } + + if len(metaTransactionRequestAfterSelectHooks) != 0 { + for _, obj := range resultSlice { + if err := obj.doAfterSelectHooks(ctx, e); err != nil { + return err + } + } + } + + if len(resultSlice) == 0 { + return nil + } + + if singular { + foreign := resultSlice[0] + object.R.BurnRequest = foreign + if foreign.R == nil { + foreign.R = &metaTransactionRequestR{} + } + foreign.R.BurnRequestVehicleNFT = object + return nil + } + + for _, local := range slice { + for _, foreign := range resultSlice { + if queries.Equal(local.BurnRequestID, foreign.ID) { + local.R.BurnRequest = foreign + if foreign.R == nil { + foreign.R = &metaTransactionRequestR{} + } + foreign.R.BurnRequestVehicleNFT = local + break + } + } + } + + return nil +} + // LoadClaim allows an eager lookup of values, cached into the // loaded structs of the objects. This is for an N-1 relationship. func (vehicleNFTL) LoadClaim(ctx context.Context, e boil.ContextExecutor, singular bool, maybeVehicleNFT interface{}, mods queries.Applicator) error { @@ -1096,6 +1248,75 @@ func (vehicleNFTL) LoadVehicleTokenSyntheticDevice(ctx context.Context, e boil.C return nil } +// SetBurnRequest of the vehicleNFT to the related item. +// Sets o.R.BurnRequest to related. +// Adds o to related.R.BurnRequestVehicleNFT. +func (o *VehicleNFT) SetBurnRequest(ctx context.Context, exec boil.ContextExecutor, insert bool, related *MetaTransactionRequest) error { + var err error + if insert { + if err = related.Insert(ctx, exec, boil.Infer()); err != nil { + return errors.Wrap(err, "failed to insert into foreign table") + } + } + + updateQuery := fmt.Sprintf( + "UPDATE \"devices_api\".\"vehicle_nfts\" SET %s WHERE %s", + strmangle.SetParamNames("\"", "\"", 1, []string{"burn_request_id"}), + strmangle.WhereClause("\"", "\"", 2, vehicleNFTPrimaryKeyColumns), + ) + values := []interface{}{related.ID, o.MintRequestID} + + if boil.IsDebug(ctx) { + writer := boil.DebugWriterFrom(ctx) + fmt.Fprintln(writer, updateQuery) + fmt.Fprintln(writer, values) + } + if _, err = exec.ExecContext(ctx, updateQuery, values...); err != nil { + return errors.Wrap(err, "failed to update local table") + } + + queries.Assign(&o.BurnRequestID, related.ID) + if o.R == nil { + o.R = &vehicleNFTR{ + BurnRequest: related, + } + } else { + o.R.BurnRequest = related + } + + if related.R == nil { + related.R = &metaTransactionRequestR{ + BurnRequestVehicleNFT: o, + } + } else { + related.R.BurnRequestVehicleNFT = o + } + + return nil +} + +// RemoveBurnRequest relationship. +// Sets o.R.BurnRequest to nil. +// Removes o from all passed in related items' relationships struct. +func (o *VehicleNFT) RemoveBurnRequest(ctx context.Context, exec boil.ContextExecutor, related *MetaTransactionRequest) error { + var err error + + queries.SetScanner(&o.BurnRequestID, nil) + if _, err = o.Update(ctx, exec, boil.Whitelist("burn_request_id")); err != nil { + return errors.Wrap(err, "failed to update local table") + } + + if o.R != nil { + o.R.BurnRequest = nil + } + if related == nil || related.R == nil { + return nil + } + + related.R.BurnRequestVehicleNFT = nil + return nil +} + // SetClaim of the vehicleNFT to the related item. // Sets o.R.Claim to related. // Adds o to related.R.ClaimVehicleNFT.