{"id":26063216,"url":"https://github.com/edgio/ec-sdk-go","last_synced_at":"2025-12-14T21:23:03.853Z","repository":{"id":37954259,"uuid":"380016001","full_name":"Edgio/ec-sdk-go","owner":"Edgio","description":"EdgeCast Go SDK","archived":false,"fork":false,"pushed_at":"2023-05-01T21:00:18.000Z","size":823,"stargazers_count":1,"open_issues_count":3,"forks_count":2,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-05T23:11:47.899Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Edgio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"Contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"Code-of-Conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-24T18:21:34.000Z","updated_at":"2023-12-05T00:10:19.000Z","dependencies_parsed_at":"2024-06-20T01:26:25.442Z","dependency_job_id":"61f84cc8-b58b-4362-acba-c66e4d18e34e","html_url":"https://github.com/Edgio/ec-sdk-go","commit_stats":null,"previous_names":["verizondigital/ec-sdk-go","edgecast/ec-sdk-go"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edgio%2Fec-sdk-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edgio%2Fec-sdk-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edgio%2Fec-sdk-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edgio%2Fec-sdk-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Edgio","download_url":"https://codeload.github.com/Edgio/ec-sdk-go/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242580654,"owners_count":20153016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-08T16:34:01.915Z","updated_at":"2025-12-14T21:23:03.332Z","avatar_url":"https://github.com/Edgio.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go SDK for EdgeCast CDN\nThe official Go SDK for interacting with EdgeCast APIs.\n\nJump To:\n* [Using the SDK](#using-the-sdk)\n    * [Customer Management](#customer-management)\n\t* [Edge CNAME](#edge-cname)\n\t* [Customer Origin](#customer-origin)\n\t* [Customer Origin v3](#customer-origin-v3)\n\t* [Route (DNS)](#route-dns)\n\t* [Real Time Log Delivery (RTLD)](#real-time-log-delivery-rtld)\n\t* [Web Application Firewall (WAF)](#web-application-firewall-waf)\n\t* [Web Application Firewall (WAF) - Bot Manager (Advanced)](#web-application-firewall-waf---bot-manager-advanced)\n* [Project Structure](#structure)\n* [Contributing](#contributing)\n* [Maintainers](#maintainers)\n* [Resources](#resources)\n\n## Dependencies\n- Go 1.19\n\n## Installing\n### $GOPATH\nTo install the SDK into your $GOPATH:\n```shell\ngo get -u github.com/EdgeCast/ec-sdk-go\n```\n\n### Go Modules\n```shell\ngo get github.com/EdgeCast/ec-sdk-go\n```\n\n## Using the SDK\nSimply import the SDK and provide the API credentials provided to you. They may \nbe an API Token or OAuth 2.0 Credentials. Examples are listed below for each \nfeature.\n\n### Customer Management ###\n\nOur Customer Management service provides administrative operations to manage \nCustomer accounts and Customer User accounts for a Partner. These operations \nallow a partner to automate administrative tasks on their customers and \ncustomer user accounts. \n\nTo use this Customer Management service, use the API Token provided to you.\n\n#### Customer\n\nCustomer Account Management Operations allows management of customer accounts\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/customer\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\tcustomerService, err := customer.New(sdkConfig)\n\tnewCustomer := customer.Customer{\n\t\t// ...\n\t}\n\taddParams := customer.NewAddCustomerParams()\n\taddParams.Customer = newCustomer\n\tresp, err := customerService.AddCustomer(*addParams)\n\t// ...\n```\n\n#### Customer User\n\nCustomer User Account Management Operations allows you to manage user accounts \nunder a (parent) customer.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/customer\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\tcustomerService, err := customer.New(sdkConfig)\n\tcustomerUser := customer.CustomerUser{\n\t\t// ...\n\t}\n\taddParams := customer.NewAddCustomerUserParams()\n\taddParams.CustomerUser = customerUser\n\t// ...\n\tresp, err := customerService.AddCustomerUser(*addParams)\n\t// ...\n```\n\n### Edge CNAME ###\n\nOur User-Friendly URL, also known as Edge CNAME, takes advantage of an Edge CNAME \nconfiguration and a CNAME record to provide a friendlier alternative to a CDN URL. \nAn edge CNAME URL is specific to the platform from which it was configured.\n\nFor more information, please read the [official documentation for Edge CNAME](https://docs.edgecast.com/cdn/index.html#Origin_Server_-_File_Storage/Creating_an_Alias_for_a_CDN_URL.htm)\n\nTo use the edge CNAME service, use the API Token provided to you.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/edgecname\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\tedgecnameService, err := edgecname.New(sdkConfig)\n\tcname := edgecname.EdgeCname{\n\t\t// ...\n\t}\n\taddParams := edgecname.NewAddEdgeCnameParams()\n\taddParams.EdgeCname = cname\n\t// ...\n\tresp, err := edgecnameService.AddEdgeCname(*addParams)\n// ...\n```\n\n### Customer Origin \n\nOur Customer Origin Service allows you to serve content stored or generated by \nthird-party web servers (e.g., web hosting) via the CDN by:\n\n- Creating a customer origin configuration. This type of configuration maps one \nor more servers to a CDN URL.\n- (Optional) Creating an edge CNAME configuration that allows you to serve traffic \nvia the CDN without having to update your links. This type of configuration maps \na customer origin configuration to a CNAME record.\n\nFor more information, please read the [official documentation for Customer Origin](https://docs.edgecast.com/cdn/index.html#Origin_Server_-_File_Storage/Customer_Origin_Server.htm)\n\nTo use the Customer Origins service, use the API Token provided to you.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/edgecname\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\toriginService, err := origin.New(sdkConfig)\n\tnewOrigin := origin.Origin{\n\t\t// ...\n\t}\n\taddParams := origin.NewAddOriginParams()\n\t// ...\n\taddParams.Origin = newOrigin\n\tresp, err := originService.AddOrigin(*addParams)\n// ...\n```\n\n### Customer Origin v3\n-\u003e Customer Origin v3 is currently available as a BETA. Business-critical processes should not depend on this functionality.\n\nCustomer Origin v3 uses dedicated endpoints to manage a customer origin group and origin entries. This allows you to manage a customer origin group and all of its entries using multiple requests rather than in a single request. \n\nIt also supports managing a customer origin group's TLS configuration and retrieval of the Function@Edge functions associated with your customer origin groups.\n\nFor more information, please read the [official documentation for Customer Origin v3](https://developer.edgecast.com/cdn/api/index.html#Origins/Origins.htm).\n\nFor detailed code examples, please refer to the [examples directory](https://github.com/Edgio/ec-sdk-go/tree/main/example/originv3).\n\n#### Origin Groups\nCreate Origin Groups using the platform specific namespace within the OriginV3 Service. See below for an example of creating an HTTP Large Origin Group.\n\n```go\n// Set up the creation model.\ntlsSettings := originv3.TlsSettings{\n\tPublicKeysToVerify: []string{\n\t\t\"ff8b4a82b08ea5f7be124e6b4363c00d7462655f\",\n\t\t\"c571398b01fce46a8a177abdd6174dfee6137358\",\n\t},\n}\n\ntlsSettings.SetAllowSelfSigned(false)\ntlsSettings.SetSniHostname(\"origin.example.com\")\ngrp := originv3.CustomerOriginGroupHTTPRequest{\n\tName:        \"test group\",\n\tTlsSettings: \u0026tlsSettings,\n}\n\ngrp.SetHostHeader(\"override-hostheader.example.com\")\ngrp.SetNetworkTypeId(2)          // Prefer IPv6 over IPv4\ngrp.SetStrictPciCertified(false) // Allow non-PCI regions\n\n// Set params and add the new group.\naddParams := originv3.NewAddHttpLargeGroupParams()\naddParams.CustomerOriginGroupHTTPRequest = grp\naddResp, err := svc.HttpLargeOnly.AddHttpLargeGroup(addParams)\n```\n\n#### Customer Origin Entry (v3)\nAdd an origin entry to a customer origin group for either platform. See below for an example of creating an HTTP Large Customer Origin Entry. For a detailed example, please refer to the examples directory.\n\n```go\naddParams := originv3.NewAddOriginParams()\naddParams.MediaType = enums.HttpLarge.String()\noriginRequest := originv3.NewCustomerOriginRequest(\n\t\"cdn-origin-example.com\",\n\tfalse,\n\tgroupID,\n)\naddParams.CustomerOriginRequest = *originRequest\naddResp, err := svc.Common.AddOrigin(addOriginParams)\n```\n\n#### Load Balancing\nUpdate a customer origin group's failover order through a platform-specific endpoint.\n\nKey information:\n- Sort order is defined on a per protocol basis.\n- If you create an origin entry that is configured to match the client's protocol (protocol_type_id=3), then our service will create an HTTP and an HTTPS version of it. Each of these origin entries may be assigned a different sort order.\n- Ensure that sort order is applied as intended by defining a sort position for all of the customer origin group's origin entries that correspond to the desired protocol (i.e., HTTP or HTTPS). Defining a sort position for a subset of origin entries that correspond to that protocol may produce unexpected results.\n\n```go\nfailoverParams := originv3.NewUpdateFailoverOrderParams()\nfailoverParams.MediaType = enums.HttpLarge.String()\nfailoverParams.GroupId = groupID\nfailoverParams.FailoverOrder = []originv3.FailoverOrder{\n\t{\n\t\tId:            origin1ID,\n\t\tHost:          \"http://cdn-origin-example.com\",\n\t\tFailoverOrder: 0,\n\t},\n\t{\n\t\tId:            origin2ID,\n\t\tHost:          \"http://cdn-origin-example2.com\",\n\t\tFailoverOrder: 2,\n\t},\n\t{\n\t\tId:            origin3ID,\n\t\tHost:          \"http://cdn-origin-example3.com\",\n\t\tFailoverOrder: 1,\n\t},\n}\n\nerr = svc.Common.UpdateFailoverOrder(failoverParams)\n```\n\n### Route (DNS) ###\n\n-\u003e Route (DNS) is currently available as a BETA. Business-critical processes should not depend on this functionality.\n\nOur Route (DNS) solution is a reliable, high performance, and secure DNS service \nthat provides capabilities such as:\n\n- Load balance traffic for a CNAME record or a subdomain for a primary zone hosted \non another DNS system.\n- Establish a failover system for a CNAME record or a subdomain for a primary zone \nhosted on another DNS system.\n- Create a standard DNS zone. Optionally, load balance or failover requests to \nthat zone.\n- Import a secondary DNS zone by creating a master server group and a secondary \nzone group.\n- Verify a server's capability to fulfill requests through health checks performed \nfrom around the world.\n\nFor more information, please read the [official documentation for Route (DNS)](https://docs.whitecdn.com/cdn/index.html#Route/Route_DNS.htm%3FTocPath%3DRoute%2520(DNS)%7C_____0)\n\nTo use the Route(DNS) service, use the API Token provided to you.\n\n#### Master Server Group\n\nA master server group allows quick and easy management of master name servers, \nwhile a secondary zone group defines the secondary zones that will be imported \nfrom servers defined in a master server group and any TSIG keys that should be \nused for the zone transfer.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/routedns\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\trouteDNSService, err := routedns.New(sdkConfig)\n\tmasterServerGroup := buildMasterServerGroup()\n\taddParams := routedns.NewAddMasterServerGroupParams()\n\taddParams.MasterServerGroup = masterServerGroup\n\t// ...\n\tresp, err := routeDNSService.AddMasterServerGroup(*addParams)\n// ...\n```\n\n### Real Time Log Delivery (RTLD)\n\nOur Real-Time Log Delivery (RTLD) service delivers log data in near real-time \nto a variety of destinations.\n\nFor more information, please read the [official documentation for Real-Time Log Delivery (RTLD)](https://docs.edgecast.com/cdn/index.html#RTLD/RTLD.htm%3FTocPath%3DReports%2520and%2520Log%2520Data%7CReal-Time%2520Log%2520Delivery%7C_____0).\n\nTo use the Rules Engine service, use OAuth 2.0 Credentials.\n\n#### Real-Time Log Delivery Rate Limiting (RTLD Rate Limiting)\n\nDelivers log data that describes requests for which Web Application Firewall (WAF) \nenforced a rate limit as defined through a rate rule.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf\"\n)\n// ...\n\tidsCredentials := edgecast.IDSCredentials{\n\t\tClientID:     clientID,\n\t\tClientSecret: clientSecret,\n\t\tScope:        scope,\n\t}\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.IDSCredentials = idsCredentials\n\trtldService, err := rtld.New(sdkConfig)\n\taddParams := profiles_rl.NewProfilesRateLimitingAddCustomerSettingParams()\n\taddParams.SettingDto = \u0026rtldmodels.RateLimitingProfileDto{\n\t\t// ...\n\t}\n\taddResp, err :=\n\t\trtldService.ProfilesRl.ProfilesRateLimitingAddCustomerSetting(addParams)\n\t// ...\n```\n\n### Rules Engine\n\nOur Rules Engine allows the customization of requests handled by our CDN. \nSample customizations that may be performed are:\n\nOverride or define a custom cache policy\nSecure or deny requests for sensitive content\nRedirect requests to a different URL\n\nFor more information, please read the [official documentation for Custom Request Handling via Rules Engine](https://docs.whitecdn.com/cdn/index.html#HRE/HRE.htm).\n\nTo use the Rules Engine service, use OAuth 2.0 Credentials.\nA Policy should be constructed as a JSON object passed as a string.\n\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf\"\n)\n// ...\n\tpolicyString := `{\n\t\t// ...\n\t}`\n\tidsCredentials := edgecast.IDSCredentials{\n\t\tClientID:     clientID,\n\t\tClientSecret: clientSecret,\n\t\tScope:        scope,\n\t}\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.IDSCredentials = idsCredentials\n\trulesengineService, err := rulesengine.New(sdkConfig)\n\taddParams := rulesengine.NewAddPolicyParams()\n\taddParams.PolicyAsString = policyString\n\taddPolicyResp, err := rulesengineService.AddPolicy(*addParams)\n// ...\n```\n\n### Web Application Firewall (WAF)\nOur WAF service provides a layer of security between many security threats and \nyour external web infrastructure. WAF increases security by monitoring, detecting, \nand preventing application layer attacks. It inspects inbound HTTP/HTTPS traffic \nagainst reactive and proactive security policies and blocks malicious activity \nin-band and on a real-time basis.\n\nFor more information, please read the [official documentation for Web Application Firewall (WAF)](https://docs.edgecast.com/cdn/index.html#Web-Security/Web-Application-Firewall-WAF.htm).\n\nTo use the WAF service, use the API Token provided to you.\n\n#### Access Rules\nAn access rule identifies legitimate traffic and threats by ASN, Cookie, Country, \nIP Address, Referrer, URL, User agent, HTTP method, Media type, File extension, \nand Request headers.\n\nFor detailed information about Access Rules in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Access-Rules.htm).\n\n#### Bot Rule Sets\nUse bot rules to require a client (e.g., a web browser) to solve a challenge \nbefore resolving the request. WAF blocks traffic when the client cannot solve \nthis challenge within a few seconds. Basic bots typically cannot solve this type\nof challenge, and therefore their traffic is blocked. This prevents them from \nscraping your site, carding, spamming your forms, launching DDoS attacks, and \ncommitting ad fraud.\n\nFor detailed information about Bot Rules in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Bot-Rules.htm).\n\n#### Custom Rule Sets\nUse custom rules to tailor how WAF identifies malicious traffic. This provides\nadded flexibility for threat identification that allows you to target malicious\ntraffic with minimal impact on legitimate traffic. Custom threat identification\ncombined with rapid testing and deployment enables you to quickly address \nlong-term and zero-day vulnerabilities.\n\nFor detailed information about Custom Rules in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Custom-Rules.htm).\n\n#### Managed Rules\nManaged Rules identify malicious traffic via predefined rules. A collection of \npolicies and rules is known as a rule set.\n\nFor detailed information about Managed Rules in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Managed-Rules.htm).\n\n#### Rate Rules\nRate Rules restricts the flow of site traffic with the intention of:\n- Diverting malicious or inadvertent DDoS traffic.\n- Preventing a customer origin server from being overloaded.\n- Requests that exceed the rate limit may be dropped, redirected to another\nURL, or sent a custom response.\n\nFor detailed information about Rate Rules in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Rate-Rules.htm).\n\n#### WAF Sample Usage\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/rules/access\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/rules/bot\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/rules/custom\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/rules/managed\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/rules/rate\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf/scopes\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\twafService, err := waf.New(sdkConfig)\n\taccountNumber := \"ACCOUNT_NUMBER\"\n\n\taccessRuleID, err := wafService.AccessRules.AddAccessRule(\n\t\taccess.AddAccessRuleParams{\n\t\t\tAccountNumber: accountNumber,\n\t\t\tAccessRule:    access.AccessRule{\n\t\t\t\t// ...\n\t\t\t}\n\t\t})\n\n\tbotRuleSetID, err = wafService.BotRuleSets.AddBotRuleSet(\n\t\tbot.AddBotRuleParams{\n\t\t\tAccountNumber: accountNumber,\n\t\t\tBotRuleSet:       bot.BotRuleSet{\n\t\t\t\t// ...\n\t\t\t},\n\t\t})\n\n\tcustomRuleSetID, err = wafService.CustomRuleSets.AddCustomRuleSet(\n\t\tcustom.AddCustomRuleSetParams{\n\t\t\tAccountNumber: accountNumber,\n\t\t\tCustomRuleSet:  custom.CustomRuleSet{\n\t\t\t// ...\n\t\t\t},\n\t\t})\n\n\tmanagedRuleID, err = wafService.ManagedRules.AddManagedRule(\n\t\tmanaged.AddManagedRuleParams{\n\t\t\tAccountNumber: accountNumber,\n\t\t\tManagedRule:   managed.ManagedRule{\n\t\t\t\t// ...\n\t\t\t},\n\t\t})\n\n\trateRuleID, err = wafService.RateRules.AddRateRule(\n\t\trate.AddRateRuleParams{\n\t\t\tAccountNumber: accountNumber,\n\t\t\tRateRule:      rate.RateRule{\n\t\t\t\t// ...\n\t\t\t},\n\t\t})\n\n\tscope := scopes.Scope{\n\t\tHost: scopes.MatchCondition{\n\t\t\t// ...\n\t\t},\n\t\tLimits: \u0026[]scopes.Limit{\n\t\t\t{\n\t\t\t\tID: rateRuleID,\n\t\t\t\tAction: scopes.LimitAction{\n\t\t\t\t\t// ...\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tACLProdID:  \u0026accessRuleID,\n\t\tACLProdAction: \u0026scopes.ProdAction{\n\t\t\t// ...\n\t\t},\n\t\tProfileProdID:  \u0026managedRuleID,\n\t\tProfileProdAction: \u0026scopes.ProdAction{\n\t\t\t// ...\n\t\t},\n\t\tRuleProdID:  \u0026customRuleSetID,\n\t\tRuleProdAction: \u0026scopes.ProdAction{\n\t\t\t// ...\n\t\t},\n\t\tBotsProdID: \u0026botRuleSetID,\n\t\tBotsProdAction: \u0026scopes.ProdAction{\n\t\t\t// ...\n\t\t},\n\t}\n\n\tmodifyAllScopesResp, err := wafService.Scopes.ModifyAllScopes(\n\t\t\u0026scopes.Scopes{\n\t\t\tCustomerID: accountNumber,\n\t\t\tScopes:     []scopes.Scope{scope},\n\t\t})\n```\n\n### Web Application Firewall (WAF) - Bot Manager (Advanced)\nBot Manager Advanced adds an additional layer of security that is dedicated to \nbot detection and mitigation. It is designed to automatically detect good bots \n(e.g., search bots) and bad bots, including those that spoof good bots, by \nanalyzing requests and behavior. You may even customize how bad bots are \ndetected and mitigated by defining custom criteria that profiles a bad bot and \nthe action that we will take for that traffic. Bot Manager Advanced is also able \nto mitigate basic bots by requiring a web browser to resolve a JavaScript \nchallenge before our service will resolve traffic. Finally, it provides \nactionable near real-time data on detected bots through which you may fine-tune \nyour configuration to reduce false positives.\n\nBot Manager Advanced is a powerful tool through which you may mitigate \nundesired bot traffic and prevent them from performing undesired or malicious \nactivity, such as scraping your site, carding, taking over accounts through \ncredential stuffing, spamming your forms, launching DDoS attacks, and \ncommitting ad fraud.\n\nFor detailed information about Bot Manager in WAF, please read the [official documentation](https://docs.edgecast.com/cdn/#Web-Security/Advanced-Bot-Manager.htm).\n\n#### WAF - Bot Manager (Advanced) Sample Usage\n```go\nimport (\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast\"\n\t\"github.com/EdgeCast/ec-sdk-go/edgecast/waf_bot_manager\"\n)\n// ...\n\tsdkConfig := edgecast.NewSDKConfig()\n\tsdkConfig.APIToken = \"MY API TOKEN\"\n\twafBotManagerService, err := waf_bot_manager.New(sdkConfig)\n\tcustomerID := \"\u003cCustomer ID\u003e\"\n\tbotRuleID := \"\u003cBot Rule ID\u003e\" \n\n\tbotmanager := waf_bot_manager.BotManager{\n\t\tName: waf_bot_manager.PtrString(\"my bot manager\"),\n\t\tSpoofBotActionType: waf_bot_manager.PtrString(\"ALERT\"),\n\t\tActions: \u0026waf_bot_manager.ActionObj{\n\t\t\tALERT: \u0026waf_bot_manager.AlertAction{\n\t\t\t\t// ...\n\t\t\t},\n\t\t\tBLOCK_REQUEST: \u0026waf_bot_manager.BlockRequestAction{\n\t\t\t\t// ...\n\t\t\t},\n\t\t\tBROWSER_CHALLENGE: \u0026waf_bot_manager.BrowserChallengeAction{\n\t\t\t\t// ...\n\t\t\t},\n\t\t\tCUSTOM_RESPONSE: \u0026waf_bot_manager.CustomResponseAction{\n\t\t\t\t// ...\n\t\t\t},\n\t\t\tREDIRECT302: \u0026waf_bot_manager.RedirectAction{\n\t\t\t\t// ... \n\t\t\t},\n\t\t\tRECAPTCHA: \u0026waf_bot_manager.RecaptchaAction{\n\t\t\t\t// ...\n\t\t\t},\n\t\t},\n\t\tBotsProdId:      \u0026botRuleID,\n\t\tCustomerId:      \u0026customerID,\n\t\tExceptionCookie: []string{\"sample cookie\"},\n\t\tExceptionJa3:    []string{\"sample ja3\"},\n\t\tExceptionUrl:    []string{\"sample url\"},\n\t\tExceptionUserAgent: []string{\"sample user agent\"},\n\t\tInspectKnownBots: waf_bot_manager.PtrBool(true),\n\t\tKnownBots: []waf_bot_manager.KnownBotObj{\n\t\t\t{\n\t\t\t\t// ...\n\t\t\t},\n\t\t},\n\t}\n\n\tcreateBotManagerParams := waf_bot_manager.NewCreateBotManagerParams()\n\tcreateBotManagerParams.CustId = customerID\n\tcreateBotManagerParams.BotManagerInfo = \u0026botmanager\n\n\tcreateBotManagerResp, err := svc.BotManagers.CreateBotManage(createBotManagerParams)\n```\n\n## Structure\n\n```\n.\n├── edgecast\n\tpackage containing the main functionality for sdk.\n\tPlease add new client and model folders for new services here.\n│   ├── eclog\n\t\tdefines the the implementation and helper methods for logging\n│   ├──\tinternal\n\t\tpackage containing helper methods and shared functionality used in sdk\n\t\tplease add new helper methods here\n│   │\t├── collectionhelper\n\t\t\thelper methods for working with aggregate/collection types\n│   │\t├── jsonhelper\t\t\n\t\t\thelper methods for working with json\n│   │\t├── testhelper\n\t\t\thelper methods used in testing\n│   │\t├── ecauth\n\t\t\tauthentication layer for oauth 2.0 and token based authentication\n│   │\t└── ecclient\n\t\t\tpackage client provides a base client implementation for interacting \n\t\t\twith edgecast cdn apis.\n\t\t\tconfiguration and authentication types are also provided.\n│   ├── customer\n\t\tclient files for interacting with customer api\n\t\tmodel files for customer\n│   ├── edgecnamee\n\t\tclient files for interacting with edge cname api\n\t\tmodel files for edge cnamee\n│   ├── origin\n\t\tclient files for interacting with customer origin api\n\t\tmodel files for customer origin\n│   ├── originv3\n\t\tclient files for interacting with customer origin v3 api\n\t\tmodel files for customer origin\n│   ├── routedns\n\t\tclient files for interacting with route (dns)\n\t\tmodel files for route (dns)\n│   ├── rtld\n\t\tclient files for interacting with real time log delivery api\n│   ├── rtldmodels\n\t\tmodel files for real time log delivery\n│   ├── rulesengine\n\t\tclient files for interacting with rules engine api\n\t\tmodel files for rules engine\n│   ├── waf\n\t\tclient files for interacting with waf api\n\t\tmodel files for waf\n│   ├── shared\n\t\tshared models and enums\n│   ├── config\n\t\tdefines the configuration of sdk services\n│   ├── doc\n\t\tplease add new docs here as needed\n│   └── version\n\t\tlists the latest version of sdk\t\t\n├── example\n\texample files to get started using the services\n├── template\n\ttemplate files used to generate client files and models using swagger api \n\tdocumentation\n└── Makefile\n        This Makefile should contain all testing and building operations.\n\n```\n\n## Contributing\n\nPlease refer to the [contributing.md](https://github.com/Edgio/ec-sdk-go/blob/main/Contributing.md) \nfile for information about how to get involved. \nWe welcome issues, questions, and pull requests.\n\n## Maintainers\n\n- Frank Contreras: frank.contreras@edgecast.com\n- Steven Paz: steven.paz@edgecast.com\n- Shikha Saluja: shikha.saluja@edgecast.com\n\n## Resources\n\n[CDN Reference Documentation](https://docs.edgecast.com/cdn/index.html) - This \nis a useful resource for learning about EdgeCast CDN. It is a good starting point \nbefore using this SDK.\n\n[API Documentation](https://docs.edgecast.com/cdn/index.html#REST-API.htm%3FTocPath%3D_____8) - \nFor developers that want to interact directly with the EdgeCast CDN API, \nrefer to this documentation. It contains all of the available operations as well \nas their inputs and outputs.\n\n[Examples](https://github.com/Edgio/ec-sdk-go/tree/main/example) - Examples \nto get started can be found here.\n\n[Submit an Issue](https://github.com/Edgio/ec-sdk-go/issues) - Found a bug? \nWant to request a feature? Please do so here.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedgio%2Fec-sdk-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedgio%2Fec-sdk-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedgio%2Fec-sdk-go/lists"}