checkpoint-client
v1.1.33
Published
javascript checkpoint client
Downloads
880,896
Readme
Checkpoint Client
A TypeScript Checkpoint Client for the Checkpoint Server. Checkpoint provides version information and security alerts for your products.
import checkpoint from 'checkpoint-client'
checkpoint.check({
product: 'prisma',
version: '2.0.0',
})
Features
- No impact on the developer experience of your CLI
- Easily hook into any product
- Bring your own styles
Install
npm install checkpoint-client
API
checkpoint.check(input: Input): Promise<Result>
Check for the latest version and inform the user of any security notices.
await checkpoint.check({
product: 'prisma',
version: '2.0.0',
})
Input
| Field | Attributes | Description |
| -----------------: | :-----------------: | :------------------------------------------------------------------------ |
| product
| string, required | Name of the product. Current we only support prisma
. |
| version
| string, required | Currently installed version of the product (e.g. 1.0.0-rc0
) |
| cli_path_hash
| string, required | A unique hash of the path in which the CLI is installed |
| project_hash
| string, required | A unique hash of the project's path, i.e.. the schema.prisma
's path |
| disable
| boolean, required | Disable checking for an update if it's not already cached. Useful for CI. |
| endpoint
| string, optional | Checkpoint server endpoint URL. Defaults to https://checkpoint.prisma.io. |
| timeout
| number, optional | Time in milliseconds we should wait for a response before giving up. |
| arch
| string, optional | Client's operating system architecture (e.g. amd64
). |
| os
| string, optional | Client's operating system (e.g. darwin
). |
| node_version
| string, optional | Client's node version (e.g. v12.12.0
). |
| signature
| string, optional | Random, non-identifiable signature to ensure alerts aren't repeated. |
| cache_file
| string, optional | File where we store the response for the cache_duration
. |
| cache_duration
| number, optional | Time in milliseconds to store the response. Defaults to 12 hours. |
| remind_duration
| number, optional | Time in milliseconds to wait for a new reminder. Defaults to 48 hours. |
| force
| boolean, optional | Force a check regardless of disable
or CHECKPOINT_DISABLE
. |
| unref
| boolean, optional | Control when we should unreference the child. Use with care. |
| cli_install_type
| string, optional | 'local' or 'global' |
Result
The result's shape changes depending on the status
:
status: "ok"
and status: "reminded"
The ok
status occurs when we our cached result is available and valid.
type Result = {
status: 'ok'
data: Output
}
The reminded
status occurs when we recently checked the cache. This status is influenced by the remind_duration
.
type Result = {
status: 'reminded'
data: Output
}
In both cases, the Output
has the following shape:
| Field | Attributes | Description |
| ----------------------: | :-----------------: | :----------------------------------------------- |
| product
| string, required | Product we're checking on. |
| current_version
| string, required | Latest version of the product. |
| current_release_date
| number, required | Release date of the latest version in Unix time. |
| current_download_url
| string, required | URL to download the latest version. |
| current_changelog_url
| string, required | URL to the latest version's changelog. |
| project_website
| string, required | Website for the project. |
| outdated
| boolean, required | True if the our version is outdated. |
| alerts[]
| Alert[], required | New security alerts or notices for this version. |
| .id
| string, required | ID of the alert. |
| .date
| string, required | Date of the alert in Unix time. |
| .message
| string, required | Alert message. |
| .url
| string, optional | URL for more information about the alert. |
| .level
| string, required | Severity of the alert. |
status: "waiting"
The waiting
status occurs when we don't have the cached result and we're requesting it from the checkpoint server.
type Result = {
status: 'waiting'
data: ChildProcess
}
If you like, you can pass unref: false
as input and wait for the ChildProcess
to exit. The child process prints out the Output
to stdout. You can see an example in check-version.
status: "disabled"
The disabled
status occurs when we've explicitly disabled this service. The most common case for this is in CI.
type Result = {
status: 'disabled'
}
You can see an example for this in is-ci.
Environment variables
| Field | Attributes | Description |
| -------------------: | :----------------: | :--------------------------------------------- |
| CHECKPOINT_DISABLE
| string, optional | Disable the checkpoint client |
| CHECKPOINT_TIMEOUT
| string, optional | Globally set timeout for our checkpoint client |
Clearing the Cache
// macOS
ls ~/Library/Caches/checkpoint-nodejs
rm -rf ~/Library/Caches/checkpoint-nodejs
// Windows
C:\Users\Jan\AppData\Local\checkpoint-nodejs
// Linux
$XDG_CACHE_HOME/checkpoint-nodejs
Or
$HOME - /home/.cache/checkpoint-nodejs
Examples
You can use ts-node
to run the examples:
npm install
npm run build
node dist/examples/is-ci.js
Publishing a new version on npm
- Create a release in the UI -> https://github.com/prisma/checkpoint-client/releases/new
- Add a tag, use the version, like
1.1.30
- Click on "Create new tag: on publish"
- Add a release title, use the version, like
1.1.30
- Click "Generate release notes" (add more info if needed)
- "Target" should be "main" (default)
- "Set as the latest release" should be checked (default)
- Click "Publish release"
- Monitor https://github.com/prisma/checkpoint-client/actions/workflows/release-latest.yml for the publish workflow
- Add a tag, use the version, like
- Update
checkpoint-client
dependency in:- prisma/prisma repository
- https://github.com/prisma/prisma/blob/main/packages/internals/package.json
- https://github.com/prisma/prisma/blob/main/packages/cli/package.json
- Renovate will open a PR automatically, if you want it faster, check the checkbox in https://github.com/prisma/prisma/issues/2985
- prisma/language-tools repository
- https://github.com/prisma/language-tools/blob/main/packages/vscode/package.json
- Renovate will open a PR automatically, if you want it faster, check the checkbox in https://github.com/prisma/language-tools/issues/504
- prisma/studio-code repository
- https://github.com/prisma/studio-code/blob/main/packages/server/package.json
- Renovate will open a PR automatically, if you want it faster, check the checkbox in https://github.com/prisma/studio-code/issues/414
- prisma/prisma repository
Previous instructions:
- Pull latest changes from GitHub
- Bump the package version
- Update the
HISTORY.md
. We recommend git-changelog. Rungit changelog --tag 1.1.XX
- Run
npm publish
- Run
git commit -am "Release <version>"
- Run
git tag <version>
- Run
git push --tags origin main
You can automate steps 5-7 with git-release.
About Us
The Prisma Team is behind the Checkpoint Client – chat with us on Slack!