{"id":29089615,"url":"https://github.com/openzeppelin/defender-client","last_synced_at":"2025-06-28T04:04:14.753Z","repository":{"id":37428087,"uuid":"278444982","full_name":"OpenZeppelin/defender-client","owner":"OpenZeppelin","description":"Monorepo for all defender-client npm packages","archived":false,"fork":false,"pushed_at":"2025-06-01T16:38:12.000Z","size":3585,"stargazers_count":58,"open_issues_count":143,"forks_count":50,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-06-06T14:40:31.622Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.openzeppelin.com/defender/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenZeppelin.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}},"created_at":"2020-07-09T18:47:44.000Z","updated_at":"2025-04-04T03:35:17.000Z","dependencies_parsed_at":"2023-09-21T20:38:09.842Z","dependency_job_id":"df7829ef-8dda-4383-ae0d-1d90ecfbd341","html_url":"https://github.com/OpenZeppelin/defender-client","commit_stats":null,"previous_names":[],"tags_count":121,"template":false,"template_full_name":null,"purl":"pkg:github/OpenZeppelin/defender-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenZeppelin%2Fdefender-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenZeppelin%2Fdefender-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenZeppelin%2Fdefender-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenZeppelin%2Fdefender-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenZeppelin","download_url":"https://codeload.github.com/OpenZeppelin/defender-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenZeppelin%2Fdefender-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262371684,"owners_count":23300595,"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-06-28T04:04:13.994Z","updated_at":"2025-06-28T04:04:14.746Z","avatar_url":"https://github.com/OpenZeppelin.png","language":"TypeScript","readme":"# Defender Client Packages\n\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/OpenZeppelin/defender-client/badge)](https://api.securityscorecards.dev/projects/github.com/OpenZeppelin/defender-client)\n[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7395/badge)](https://bestpractices.coreinfrastructure.org/projects/7395)\n[![Scorecard supply-chain security](https://github.com/OpenZeppelin/defender-client/actions/workflows/scorecard.yml/badge.svg)](https://github.com/OpenZeppelin/defender-client/actions/workflows/scorecard.yml)\n[![Stable Git Release](https://github.com/OpenZeppelin/defender-client/actions/workflows/stable-push.yml/badge.svg)](https://github.com/OpenZeppelin/defender/actions/workflows/stable-push.yml)\n[![RC Git Release](https://github.com/OpenZeppelin/defender-client/actions/workflows/rc-publish.yml/badge.svg)](https://github.com/OpenZeppelin/defender/actions/workflows/rc-publish.yml)\n[![CI](https://github.com/OpenZeppelin/defender-client/actions/workflows/ci.yml/badge.svg)](https://github.com/OpenZeppelin/defender-client/actions/workflows/ci.yml)\n[![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://slsa.dev)\n\nMonorepo that contains Defender typescript clients. Check out the individual packages for more info:\n\n- [defender-admin-client](packages/admin)\n- [defender-autotask-client](packages/autotask-client)\n- [defender-autotask-utils](packages/autotask-utils)\n- [defender-kvstore-client](packages/kvstore)\n- [defender-relay-client](packages/relay)\n- [defender-sentinel-client](packages/sentinel)\n\n## Development Setup\n\nCheckout the repo and run `yarn \u0026\u0026 yarn build`.\n\n## Testing\n\nRun `yarn test` to run unit tests across all packages.\n\n## Linting\n\nRun `yarn lint` at the project root.\n\n## Publish\n\n### Defender Client\n\n\u003e We Use `lerna` for publishing a new version of all Defender Client packages (excludes Platform Deploy Client as it is versioned separately).\n\n- We use github actions for CI/CD to tag, release \u0026 publish the packages. See details about workflows below.\n\n### Platform Deploy Client\n\nChange to the `packages/deploy` directory, login to npm, and publish using the native `yarn publish` command as shown below. We are not tagging versions for the time being as they conflict with previous Defender Client releases. Note this process is being introduced for the Platform Deploy Client v0 release, but will be migrated to a new Platform Client-specific repository.\n\nTo prepare a publish:\n\n```bash\nnpm login\ncd packages/deploy\ngit checkout master\ngit pull origin master\nyarn build\n```\n\nTo publish a release candidate:\n\n```\nyarn publish --new-version \u003cversion\u003e --tag next # version should be of format 0.5.1-rc.1\n```\n\nAnd to publish the final release:\n\n```\nyarn publish --no-git-tag-version\n# enter new version at prompt\ngit add package.json\ngit commit -m 'Bump Platform Deploy Client version to {version here}'\ngit push origin master\n```\n\n## Examples\n\nThe `examples` repo has sample code for both clients. Note that most examples rely on dotenv for loading API keys and secrets. Note that you can set the following environment variables to control to which instance your client will connect to, which is useful for testing against your Defender development instance:\n\n```bash\n# Example config\n# relay signer\nDEFENDER_RELAY_SIGNER_API_URL=\nDEFENDER_RELAY_SIGNER_POOL_ID=\nDEFENDER_RELAY_SIGNER_POOL_CLIENT_ID=\n# relay client\nDEFENDER_RELAY_API_URL=\nDEFENDER_RELAY_POOL_ID=\nDEFENDER_RELAY_POOL_CLIENT_ID=\n# admin client\nDEFENDER_API_V2_URL=  # same as DEFENDER_ADMIN_API_URL\nDEFENDER_ADMIN_API_URL=\nDEFENDER_ADMIN_POOL_ID=\nDEFENDER_ADMIN_POOL_CLIENT_ID=\n# autotask client\nDEFENDER_AUTOTASK_API_URL=\nDEFENDER_AUTOTASK_POOL_ID=\nDEFENDER_AUTOTASK_POOL_CLIENT_ID=\n# sentinel client\nDEFENDER_SENTINEL_API_URL=\nDEFENDER_SENTINEL_POOL_ID=\nDEFENDER_SENTINEL_POOL_CLIENT_ID=\n```\n\n---\n\n### CI/CD\n\n- We use github actions for CI/CD. See [workflows](.github/workflows) for more info.\n  - `ci.yml` - runs on every push to any branch --\u003e runs tests.\n  - `rc.yml` - runs on every push to master --\u003e creates a rc tag --\u003e creates a pre-release draft.\n  - `stable.yml` - Manual trigger workflow --\u003e creates a stable tag --\u003e creates a latest release --\u003e publishes to npm.\n  - `release.yml` - Manual trigger workflow --\u003e create a git release for a given tag.\n  - `publish.yml` - Manual trigger workflow ( for any given tag ) --\u003e publishes to npm.\n\n---\n\n### Determinstic Builds \u0026 Secure Publishes\n\n- We use [slsa framework](https://slsa.dev/) _pronounced \"salsa\"_ for reproducible builds \u0026 secure pushes. Verification is done using [provenance](https://slsa.dev/provenance/v1)\n\n---\n\n### Known Issues [Resolution in progress]\n\n- `lerna publish` with github actions fails due to npm permission issues due to using 2fa. Currently we use `NPM_TOKEN` in github actions which throws forbidden error. To overcome we use 2fa from local machine to publish the packages.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzeppelin%2Fdefender-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenzeppelin%2Fdefender-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenzeppelin%2Fdefender-client/lists"}