We prefer using pnpm for installing dependencies and running scripts.
- Node.js 22.13.0+ (required for local development and CI, consumer Node requirement is defined in
package.json'sengines.nodefield) - pnpm
11.9.0(pinned via thepackageManagerfield in package.json; enable Corepack to use it)
The main branch is locked for the push action. For proposing changes, use the standard pull request approach. It's recommended to discuss fixes or new functionality in the Issues, first.
This project follows the Conventional Commits standard. commitlint checks the messages of all commits in a pull request in the Analyze Commit Messages check, using the @fingerprintjs/commit-lint-dx-team config.
Husky installs these Git hooks when you run pnpm install:
commit-msgchecks the commit message with commitlint and rejects the commit if the message is invalid.pre-commitruns lint-staged, which runspnpm lint:fixon the staged.tsfiles.pre-pushtries to stop accidental pushes tomain.
Run the following command that will regenerate types:
pnpm generateTypesIt uses schema stored in resources/fingerprint-server-api.yaml. To fetch the latest schema run:
./sync.shJust run:
pnpm buildRun:
pnpm run docsThe code style is controlled by ESLint and Prettier. Run to check that the code style is ok:
pnpm lintYou aren't required to run the check manually, the CI will do it. Run the following command to fix style issues (not all issues can be fixed automatically):
pnpm lint:fixTests are located in tests folder and run by vitest in node environment.
To run tests you can use IDE instruments or just run:
pnpm testThe test might fail to due outdated snapshots. You can update snapshots by running:
pnpm test -- --updateUse the example folder to make API requests using the local version of the SDK. The example/package.json file reroutes the SDK import references to the project root folder.
-
Create an
.envfile inside theexamplefolder according to .env.example. -
Install dependencies and build the SDK (inside the root folder):
pnpm install pnpm build
-
Install dependencies and run the examples (inside the
examplefolder)):cd example pnpm install node getEvent.mjs node searchEvents.mjs
Every time you change the SDK code, you need to rebuild it in the root folder using pnpm build and then run the example again.
We use changesets to version the SDK and to write release notes.
If your PR changes the SDK's public API or behavior, add a changeset to it:
pnpm install
pnpm exec changesetPick the bump type and write a short summary. The command creates a markdown file in the .changeset folder. Commit it together with the rest of your changes. The summary is copied as-is into CHANGELOG.md and the GitHub release notes, so write it for SDK users:
---
'@fingerprint/node-sdk': minor
---
Add `device_details` smart signal to the event modelPick the bump type that matches the commit type:
| Change | Commit type | Changeset bump | Version change |
|---|---|---|---|
| Bug fix | fix |
patch |
7.8.0 -> 7.8.1 |
| New backward-compatible feature | feat |
minor |
7.8.0 -> 7.9.0 |
| Breaking change | Any <type>! (for example, feat!) or a BREAKING CHANGE: footer |
major |
7.8.0 -> 8.0.0 |
| Docs, tests, CI, refactoring and other internal changes | docs, test, ci, refactor, chore, ... |
No changeset | No release |
If a PR has several user-facing changes, add one changeset for each. When several changesets are released together, the highest bump wins.
- On every PR, a bot comments with a preview of the release notes that the PR's changesets will produce. If the PR has no changesets, the comment reminds you to add one.
- After a PR with changesets is merged to
main, the Release workflow opens aRelease [changeset]PR, or updates it if it's already open. That PR consumes all pending changesets, bumps the version and updatesCHANGELOG.md. - Merging the
Release [changeset]PR creates the Git tag and the GitHub release. The same workflow publishes the package to npm.