{"id":47237043,"url":"https://github.com/aldelo/connector","last_synced_at":"2026-03-13T23:16:12.178Z","repository":{"id":57541827,"uuid":"289205525","full_name":"aldelo/connector","owner":"aldelo","description":"Golang based gRPC server and client wrapper package for micro-service development, including health check, loading balancing, service discovery, and more, with simple to use entry points.","archived":false,"fork":false,"pushed_at":"2026-03-11T05:29:37.000Z","size":207659,"stargazers_count":8,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-11T11:38:07.748Z","etag":null,"topics":["gin","grpc","grpc-client","grpc-go","grpc-server","grpc-service","http-server","microservice","protobuf","service-discovery","tls","webhook","webserver","wrapper-api"],"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/aldelo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-21T07:22:42.000Z","updated_at":"2026-03-11T05:29:11.000Z","dependencies_parsed_at":"2023-11-27T05:23:02.536Z","dependency_job_id":"b8c4e756-1df1-4b37-bcf3-65c7cc434408","html_url":"https://github.com/aldelo/connector","commit_stats":null,"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/aldelo/connector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldelo%2Fconnector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldelo%2Fconnector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldelo%2Fconnector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldelo%2Fconnector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aldelo","download_url":"https://codeload.github.com/aldelo/connector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aldelo%2Fconnector/sbom","scorecard":{"id":178398,"data":{"date":"2025-08-11","repo":{"name":"github.com/aldelo/connector","commit":"e024a9f8403b3affcf4d676162166511664c428f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Code-Review","score":3,"reason":"Found 6/20 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":1,"reason":"SAST tool is not run on all commits -- score normalized to 1","details":["Warn: 2 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GO-2025-3787 / GHSA-fv92-fjc5-jj9h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T18:18:19.225Z","repository_id":57541827,"created_at":"2025-08-16T18:18:19.225Z","updated_at":"2025-08-16T18:18:19.225Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30479122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T20:45:58.186Z","status":"ssl_error","status_checked_at":"2026-03-13T20:45:20.133Z","response_time":60,"last_error":"SSL_read: 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":["gin","grpc","grpc-client","grpc-go","grpc-server","grpc-service","http-server","microservice","protobuf","service-discovery","tls","webhook","webserver","wrapper-api"],"created_at":"2026-03-13T23:16:11.647Z","updated_at":"2026-03-13T23:16:12.174Z","avatar_url":"https://github.com/aldelo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Overview\nconnector intends to provide a simpler coding experience with gRPC, and microservices development.\n\nWhen it comes to setting up gRPC server, connecting from gRPC client, as well as supporting microservices related needs,\ninstead of creating a large framework or package, with many features that we may not use, an emphasis is placed on coding\nproductivity as well as reducing amount of repetitive typing / boilerplate coding.\n\nOn the server end, the entry point is /service folder's Service struct. \nOn the client side, the entry point is /client folder's Client struct.\nBoth server and client supports yaml config file based setup.\n\nSince we use AWS extensively, many features integrates with AWS: (Goal is for these features to work automatically with minimum configuration)\nAdditionally, SNS is used for service discovery push notification to all connected clients, so that when new gRPC services are spun up, the clients can \nutilize automatically.\n\n- Service Discovery\n    - connector's service upon launch, auto registers with AWS cloud map for service discovery\n    - On the client side, service discovery is automatic, see config for discovery options\n    - SNS is used for service discovery push notification to all subscribed clients, so whenever new services are started up,\n      or existing services shuts down, connected gRPC clients may auto refresh endpoints dynamically\n- Health Checks\n    - service instance health is integrated with cloud map's health check status\n    - auto register and deregister on service discovery based on instance health\n    - container-level service serving status utilizes the gRPC health v1\n    - config can be set on client to auto health check for serving status, as well as manual health probe\n    - DynamoDB is also used to track service state information, so that a custom service can be used to clean up any stale connections. See example under /example/cmd/snsgateway\n- Load Balancing\n    - client side name resolver is setup to retrieve multiple service endpoints and perform round robin load balancing\n    - load balancing is per rpc call rather than per connection\n    - SNS service discovery will dynamically update load balancer's endpoints whenever services starts or shuts down\n- RpcError\n    - Rpc Error helper methods provided\n- Compressor\n    - gzip decompressor supported on service level\n    - note added on client struct for passing gzip compressor via RPC call\n- Server TLS / mTLS\n    - server TLS / mTLS is configured via service or client config file\n    - see /build/openssl-pem/make-pem.sh for CA, Server and Client Pem and Key self-signed creation  \n    - server TLS / mTLS setup in gRPC service and client is required in order to secure channel\n- Auth\n    - TODO: Future Implementation, currently using mTLS for transport level security\n- Circuit Breaker\n    - client side, default using Hystrix-Go package for circuit breaker\n    - circuit breaker is handled in client side unary and stream interceptors\n    - circuit breaker options configured via client config file\n- Rate Limiter\n    - server side, default using Uber-RateLimit package for rate limiter\n    - rate limit is handled in server side In-Tap-Handle\n    - rate limit option configured via server config file\n- Logger\n    - TODO: Future Implementation for Cloud Logging to DynamoDB table as log destination\n- Monitoring\n    - TODO: Future Implementation\n- Tracer\n    - AWS XRay is used for distributed tracing\n    - enabled via yaml config file for /service, /client, /notifiergateay, /notifierserver code\n    - XRay tracing is already built in for the following code wrappers:\n      - kms, s3, dynamodb, redis, mysql via sqlx, ses, sns, sqs, cloudmap\n      - gin web server\n      - gRPC service, gRPC client\n    - XRay requires aws xray daemon to be deployed as sidecar on EC2 or ECS, see AWS documentation for details,\n      simple comments inline under XRay code wrapper provided too for setup guidance\n- Queue\n    - AWS SQS is used as the message queue within this package\n- Notification\n    - AWS SNS is used as the notification services within this package\n    - SNS callback requires public accessible host, see /notifiergateway for supporting this requirement\n    - gRPC client to /notifiergateway, and enabling SNS callback to stream down to the gRPC client requires /notifierserver\n    - Using /notifiergateway deployed on public host such as under ALB, and /notifierserver deployed either public or private within VPC, \n      enables gRPC clients to be completely private in or out of VPC, where SNS callbacks can stream to gRPC client in real-time\n\n# Service connector\n#### Overview\n/service folder contains the gRPC service (server) wrapper.  \n#### Example of Use\nSee /example/cmd/server for a working gRPC server setup that serves test service\n#### Notes\n- TLS self sign certificates must be setup and placed into x509 sub folder\n- Use /build/openssl-pem/make-pem.sh to create self-signed openssl ca, cert and key\n- the service.yaml config file must be set properly and aws resources enabled\n- to save aws access id and secret key, use aws cli =\u003e aws configure\n\n# Client connector\n#### Overview\n/client folder contains the gRPC client (dialer) wrapper.\n#### Example of Use\nSee /example/cmd/client for a working gRPC client setup to consume the gRPC service server\n#### Notes\n- Each gRPC server service that client needs to consume, create its own service yaml in /endpoint folder\n- Each target gRPC service is described via service yaml config file in endpoint, so be sure to correctly define its config values\n- TLS self sign certificates must be setup and placed into x509 sub folder\n- Use /build/openssl-pem/make-pem.sh to create self-signed openssl ca, cert and key\n- to save aws access id and secret key, use aws cli =\u003e aws configure\n\n# Pre-Requisites\n#### 1) Install or Upgrade ***protoc***\n- In Terminal: (Mac)\n    - ~ brew install protobuf\n    - ~ brew upgrade protobuf\n#### 2) Install ***protoc-gen-go***\n- In Terminal:\n    - ~ go install google.golang.org/protobuf/cmd/protoc-gen-go\n    - More Info: https://developers.google.com/protocol-buffers/docs/reference/go-generated\n#### 3) Install ***protoc-gen-go-grpc***\n- install ***go-grpc_out***\n    - Info: https://github.com/grpc/grpc-go/tree/master/cmd/protoc-gen-go-grpc\n    - Info: https://grpc.io/docs/languages/go/quickstart/\n- In Terminal:\n    - ~ export GO111MODULE=on\n    - ~ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc\n#### 4) Info on ***proto3***\n- https://developers.google.com/protocol-buffers/docs/gotutorial\n- Define ***package*** using OrganizationOrProject.Service.Type pattern\n    - com.company.service\n    - project.proto.service\n    - domain.service.type, etc.\n- Use ***option go_package = \"xyz\";***\n    - xyz should point to the full path from $GOPATH/src to this proto file folder\n    - for example, \"github.com/aldelo/connector/example/proto/test\"\n        - where \"test\" is the folder that contains proto files\n- ***import*** should contain full path from project folder to the proto file\n    - in GoLand (JetBrains), Preferences -\u003e Languages \u0026 Preferences -\u003e Protocol Buffers\n        - Uncheck \"Configure Automatically\"\n        - Add path to $GOPATH/src\n        - Add path to $GOPATH/pkg/mod\n        - Also, under Descriptor Path\n          - Input: /github.com/golang/protobuf@v1.3.5/protoc-gen-go/descriptor/descriptor.proto\n          - Note: protobuf@v1.3.5, replace with later version if there is descriptor.proto file\n#### 5) Executing ***protoc***\n- In Terminal:\n    - go to the folder containing .proto files\n    - ~ protoc --go_out=$GOPATH/src --go-grpc_out=$GOPATH/src --proto_path=$GOPATH/src $GOPATH/src/xyz.../*.proto\n        - where xyz... refers to the actual full path below $GOPATH/src up to the folder containing the proto files\n    \n# Checking Version Info\n#### 1) Latest protoc Version on brew\n- https://formulae.brew.sh/formula/protobuf\n#### 2) Latest protobuf Version\n- https://github.com/golang/protobuf/releases\n#### 3) Latest grpc for go Version\n- https://github.com/grpc/grpc-go/releases\n#### 4) Latest protoc-gen-go Version\n- https://pkg.go.dev/google.golang.org/protobuf/cmd/protoc-gen-go\n#### 5) Latest protoc-gen-go-grpc Version\n- https://github.com/grpc/grpc-go/tree/master/cmd/protoc-gen-go-grpc\n#### 6) Latest genproto Version\n- https://pkg.go.dev/google.golang.org/genproto\n\n#go.mod Edit\n#### remove the following code (Unless github.com/aldelo/common is in the path)\n     replace github.com/aldelo/common =\u003e ../common\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faldelo%2Fconnector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faldelo%2Fconnector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faldelo%2Fconnector/lists"}