{"id":23338526,"url":"https://github.com/cloudwan/edgelq-sdk","last_synced_at":"2026-01-21T15:32:31.468Z","repository":{"id":45860136,"uuid":"451566354","full_name":"cloudwan/edgelq-sdk","owner":"cloudwan","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-20T18:47:55.000Z","size":63191,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-01-21T03:56:28.151Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/cloudwan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":"audit/access/v1/audit/audit.pb.api_access.go","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-24T17:34:41.000Z","updated_at":"2026-01-20T18:47:58.000Z","dependencies_parsed_at":"2025-07-18T14:34:13.753Z","dependency_job_id":"6dbab936-948d-4ca6-8afc-2fecd494391a","html_url":"https://github.com/cloudwan/edgelq-sdk","commit_stats":null,"previous_names":[],"tags_count":362,"template":false,"template_full_name":null,"purl":"pkg:github/cloudwan/edgelq-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudwan%2Fedgelq-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudwan%2Fedgelq-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudwan%2Fedgelq-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudwan%2Fedgelq-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudwan","download_url":"https://codeload.github.com/cloudwan/edgelq-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudwan%2Fedgelq-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28635863,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T15:01:31.228Z","status":"ssl_error","status_checked_at":"2026-01-21T14:42:58.942Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2024-12-21T03:14:14.919Z","updated_at":"2026-01-21T15:32:31.454Z","avatar_url":"https://github.com/cloudwan.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EdgeLQ SDK\n\n## Overview\nEdgeLQ is a development platform and environment of reusable, generic microservices, which enables rapid application\ndevelopment. Each EdgeLQ service utilizes Goten framework, but its API is gRPC/REST compatible.\n\nMicroservices available in EdgeLQ:\n* Identity and Access Management (IAM) - provides access to users/service account, role management and permission checks.\n  It is used by other microservices for authorization.\n* Audit - Generic service that provides view into any activity by any user or service account. Any interesting API call\n  to any EdgeLQ based service is reported to Audit - including calls to Audit itself.\n* Monitoring - Provides generic time-series endpoint, allowing various application to store any timestamp based data\n  conforming to registered (by the same applications) descriptors.\n* Devices - Provides device management (physical or virtual machines). It also enables connecting into devices.\n* Applications - It is generic service managing (any) applications installed on devices.\n* Proxies - Provides generic proxy feature for easy tunneling.\n* Secrets - Manages secrets, that can be used by other services (like Applications).\n* Meta - provides information about state of deployment (like list of regions and endpoints).\n\nEdgeLQ SDK provides:\n* Set of proto files for each mentioned above service. They can be used to learn about API and can help in\n  generating client library in practically any programming language.\n* Dedicated Golang client libraries for all the services. They were generated using proto files by dedicated protoc\n  compilers from Goten.\n* Docs in HTML format located [here](./docs/apis), with API reference for each service.\n* [Examples](./examples/cmd) - they use our Golang libraries.\n\nIn simple words, EdgeLQ SDK provides code for client-based applications talking to EdgeLQ services.\n\n## Repository structure\n\n[goten sdk]: https://github.com/cloudwan/goten-sdk\nEach service contains its own directory in this repo. Internal structure is practically same everywhere, as Goten\nenforces some common standards. All the components reference [Goten SDK] library.\n\n\nCode organization within single service has following pattern:\n\n### \\\u003cservice-name\\\u003e/proto/\\\u003cversion\\\u003e\nProvides description of APIs, resources and other objects in protobuf format. Files there can be used to learn about service\nor be used in order to generate client libraries in other programming languages.\n\nSeparation of APIs and resources into subpackages allows building more light-weight applications.\n\n### \\\u003cservice-name\\\u003e/resources/\\\u003cversion\\\u003e/\\\u003cresource-name\\\u003e\nGolang module for single resource. Contains definition of it and all helper objects - dedicated Filter, FieldMask,\nset of FieldPaths etc.\n\n### \\\u003cservice-name\\\u003e/client/\\\u003cversion\\\u003e/\\\u003capi-name\\\u003e\nContains basic (almost like raw, but type safe) client for communication with RPC API and definitions for most\nrequest/response objects.\n\n### \\\u003cservice-name\\\u003e/client/\\\u003cversion\\\u003e/\\\u003cservice-name\\\u003e\nContains sum of all clients for given service. May not be recommended if we want to minimize size of application runtime.\n\n### \\\u003cservice-name\\\u003e/access/\\\u003cversion\\\u003e/\\\u003cresource-name\\\u003e\nContains high-level client-based components like Watcher - dedicated for each resource.\n\n## How to use\nEdgeLQ utilizes [Goten SDK], which contains basic instructions. It does not require much\nextra - in order to develop Golang application with this SDK, you need to install Go and include SDK in your list of dependencies.\nYou can use [examples](./examples) provided in this repository as a help.\n\nIn order to generate SDK in other language, you need to follow steps regarding protoc installation, as described in Goten\nSDK. The only extra thing to do, is to include directory with this repository (on your machine) as additional include proto\npath.\n\n## Notes about examples\nExamples provided in this repository, in order to be executed, require access to some currently running service. You\nneed user or service account ready on hand. This user/service account needs to have a granted permission in a project where\nyou want to execute the examples. It is assumed that, at the very least, you have all of those, otherwise you would not be\nable to use cuttle or UI dashboard. SDK gives an access on the code-level, so one step further. Here you just need some additional,\nextra information on how to execute examples properly.\n\n### Endpoint\nEndpoint should contain domain with service name and port number, for example \"devices.stg01b.edgelq.com:443\".\n\n### Authentication \u0026 Authorization\nEvery action requires authentication and authorization. For this reason, example has to be executed as user or service\naccount. If you want to execute example as user, you need to get access token. For service account, you need to get a\nfile with service account key. Every example requires one or another to work.\n\n#### Getting Access Token\nIn order to get fresh access token for user, login to any dashboard like Squid. Open developer tools, find HTTP headers for\nany request dashboards sends to edgeLQ service (devices, iam, applications...). Find \"authorization\" header. It should have\na format \"Bearer $VALUE\". This VALUE will be your access token. You can copy it and use it with example.\n\nOf course, this token has limited value, so it will need to be checked again in some near future.\n\nSame token could be obtained from cuttle credentials (in ~/.config/goten.cuttle.json as default path). You need to find\nyour user entry and access token.\n\n#### Service account key file\nThis is JSON file with email, key ID, private key value. File format can be found [here](./examples/files/service_account_credentials_template.json).\n\nIf you dont have private key for any service account, but you have user, then you can create your own, its simple. This\nis how you can make with cuttle:\n\nFirst, List your projects:\n```shell\ncuttle iam list-my projects\n```\n\nChose some project ID, taken from \"name\" field. Of course, strip \"projects/\" prefix. Now, I assume that your user\ncan create service accounts. In that case, make some (with key):\n\n```shell\ncuttle iam create service-account my-test-svcacc-for-examples [--region $REGION_ID] --project $PROJECT_ID\n```\n\nOf course, \"my-test-svcacc-for-examples\" is $SERVICE_ACCOUNT_ID. You can replace with any value you like. You can specify\nREGION if you like, but you can skip. If you do, it will create in the nearest available region, which is fine. You need\nto look at response object. You will see fully qualified name with REGION_ID assigned. You will also have now EMAIL value,\nwhich is exactly what you need to have in service account key credentials file!\n\nNow, you can create service account key. With cuttle help, it will automatically create service account key file for you,\nso you dont need template really:\n\n```shell\ncuttle iam create service-account-key --project $PROJECT_ID --region $REGION_ID --service-account $SERVICE_ACCOUNT_ID \\\n  --algorithm RSA_4096 --credentials-output-file my-service-account-key-file.json\n```\n\nAs you may have noticed, this command will create file for you.\nIf you want to create private key on your own machine, its also possible (see cuttle iam create service-account-key --help).\n\nService account created in this way will not be functional without role bindings. If you want to allow this\naccount to do something useful, you need to create role binding. For example, this will allow service account to do\nanything it likes in devices service:\n```shell\ncuttle iam create role-binding --project $PROJECT_ID --role 'roles/devices-admin' --member 'serviceAccount:$EMAIL'\n```\n\nValue EMAIL must be same as in service account key file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudwan%2Fedgelq-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudwan%2Fedgelq-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudwan%2Fedgelq-sdk/lists"}