diff --git a/W/engine.go b/W/engine.go index 8cb7951..c03ac24 100644 --- a/W/engine.go +++ b/W/engine.go @@ -18,6 +18,9 @@ import ( "github.com/tdewolff/minify" "github.com/tdewolff/minify/css" "github.com/tdewolff/minify/js" + limiter "github.com/ulule/limiter/v3" + mfasthttp "github.com/ulule/limiter/v3/drivers/middleware/fasthttp" + "github.com/ulule/limiter/v3/drivers/store/memory" "github.com/valyala/fasthttp" ) @@ -46,6 +49,15 @@ type Engine struct { CreatedAt time.Time // assets + + + + \ No newline at end of file diff --git a/W2/internal/example2/svelte/apidocs/index.html b/W2/internal/example2/svelte/apidocs/index.html new file mode 100644 index 0000000..3b8c57a --- /dev/null +++ b/W2/internal/example2/svelte/apidocs/index.html @@ -0,0 +1,617 @@ + + + + + + /*! title */ + + + +
+ + +
+ + + + + + + \ No newline at end of file diff --git a/W2/internal/example2/svelte/apidocs/index.svelte b/W2/internal/example2/svelte/apidocs/index.svelte new file mode 100644 index 0000000..e69de29 diff --git a/W2/internal/example2/svelte/swagger.json b/W2/internal/example2/svelte/swagger.json new file mode 100644 index 0000000..ba7c52d --- /dev/null +++ b/W2/internal/example2/svelte/swagger.json @@ -0,0 +1,1376 @@ +{ + "info": { + "contact": { + "email": "support@example2.com", + "name": "API Support" + }, + "description": "API Spec for Example2", + "license": { + "name": "MIT License", + "url": "https://en.wikipedia.org/wiki/MIT_License" + }, + "termsOfService": "https://example2.com/term-of-service", + "title": "Example2", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "servers": [ + { + "description": "Example2 Server", + "url": "https://example2.com" + } + ], + "paths": { + "/guest/autoLogin": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "token": { + "type": "string" + }, + "path": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestAutoLogin", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "segments": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/guest/debug": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestDebug", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "request": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/guest/externalAuth": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "provider": { + "type": "string" + }, + "redirect": { + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestExternalAuth", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "link": { + "type": "string" + }, + "clientID": { + "type": "string" + }, + "redirectUrl": { + "type": "string" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "csrfState": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/guest/forgotPassword": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestForgotPassword", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ok": { + "type": "boolean" + }, + "resetPassUrl": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/guest/login": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestLogin", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "segments": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/guest/oauthCallback": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "state": { + "type": "string" + }, + "code": { + "type": "string" + }, + "accessToken": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestOauthCallback", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "oauthUser": { + "type": "object", + "properties": { + } + }, + "email": { + "type": "string" + }, + "currentUser": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "provider": { + "type": "string" + }, + "segments": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/guest/register": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestRegister", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "verifyEmailUrl": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/guest/resendVerificationEmail": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestResendVerificationEmail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ok": { + "type": "boolean" + }, + "verifyEmailUrl": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/guest/resetPassword": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "secretCode": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "password": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestResetPassword", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ok": { + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "/guest/verifyEmail": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "secretCode": { + "type": "string" + }, + "hash": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "GuestVerifyEmail", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ok": { + "type": "boolean" + }, + "email": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/superAdmin/dashboard": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "responses": { + "200": { + "description": "SuperAdminDashboard", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + }, + "/superAdmin/userManagement": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cmd": { + "type": "string" + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "withMeta": { + "type": "boolean" + }, + "pager": { + "type": "object", + "properties": { + "page": { + "type": "number" + }, + "perPage": { + "type": "number" + }, + "filters": { + "type": "object", + "properties": { + } + }, + "order": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "SuperAdminUserManagement", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "pager": { + "type": "object", + "properties": { + "page": { + "type": "number" + }, + "perPage": { + "type": "number" + }, + "pages": { + "type": "number" + }, + "total": { + "type": "number" + }, + "filters": { + "type": "object", + "properties": { + } + }, + "order": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "fields": { + "type": "object", + "properties": { + } + }, + "mutex": { + "type": "object", + "properties": { + } + }, + "cachedSelect": { + "type": "string" + } + } + }, + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "users": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/user/autoLoginLink": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "UserAutoLoginLink", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "link": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "/user/changePassword": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "oldPass": { + "type": "string" + }, + "newPass": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "UserChangePassword", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ok": { + "type": "boolean" + } + } + } + } + } + } + } + } + }, + "/user/logout": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "responses": { + "200": { + "description": "UserLogout", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "logoutAt": { + "type": "number" + } + } + } + } + } + } + } + } + }, + "/user/profile": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "responses": { + "200": { + "description": "UserProfile", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "segments": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/user/sessionKill": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sessionTokenHash": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "UserSessionKill", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "logoutAt": { + "type": "number" + }, + "sessionTerminated": { + "type": "number" + } + } + } + } + } + } + } + } + }, + "/user/sessionsActive": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "responses": { + "200": { + "description": "UserSessionsActive", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sessionsActive": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + }, + "/user/updateProfile": { + "post": { + "security": [{ + "CookieAuth": [] + }], + "tags": ["API"], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "country": { + "type": "string" + }, + "language": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "UserUpdateProfile", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "createdAt": { + "type": "number" + }, + "createdBy": { + "type": "number" + }, + "updatedAt": { + "type": "number" + }, + "updatedBy": { + "type": "number" + }, + "deletedAt": { + "type": "number" + }, + "passwordSetAt": { + "type": "number" + }, + "secretCode": { + "type": "string" + }, + "secretCodeAt": { + "type": "number" + }, + "verificationSentAt": { + "type": "number" + }, + "verifiedAt": { + "type": "number" + }, + "lastLoginAt": { + "type": "number" + }, + "fullName": { + "type": "string" + }, + "tenantCode": { + "type": "string" + }, + "role": { + "type": "string" + } + } + }, + "segments": { + "type": "object", + "properties": { + } + } + } + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "CookieAuth": { + "type": "apiKey", + "in": "cookie", + "name": "auth", + "description": "Authentication for example2" + } + } + } +} diff --git a/go.mod b/go.mod index e4b30f9..e52edce 100644 --- a/go.mod +++ b/go.mod @@ -51,6 +51,7 @@ require ( github.com/stretchr/testify v1.8.4 github.com/tarantool/go-tarantool v1.12.1 github.com/tdewolff/minify v2.3.6+incompatible + github.com/ulule/limiter/v3 v3.11.2 github.com/valyala/bytebufferpool v1.0.0 github.com/valyala/fasthttp v1.51.0 github.com/vburenin/nsync v0.0.0-20160822015540-9a75d1c80410 diff --git a/go.sum b/go.sum index 8b2bbae..4c8c163 100644 --- a/go.sum +++ b/go.sum @@ -143,12 +143,15 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU= +github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s= github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -314,8 +317,9 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -492,6 +496,8 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/ulule/limiter/v3 v3.11.2 h1:P4yOrxoEMJbOTfRJR2OzjL90oflzYPPmWg+dvwN2tHA= +github.com/ulule/limiter/v3 v3.11.2/go.mod h1:QG5GnFOCV+k7lrL5Y8kgEeeflPH3+Cviqlqa8SVSQxI= 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.36.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=