Note: This is a public mirror of TouchBistro's internal
touchbistro-node-sharedmonorepo. It is provided for community visibility and reuse, not as a live development repo. Pull requests cannot be merged; changes flow from the internal canonical repo, not into it. Code is provided as-is under the MIT license.
Shared Node.js packages used across TouchBistro services and tooling. The monorepo uses Yarn workspaces and Lerna for package orchestration and provides common building blocks for configuration, data access, messaging, jobs, auth, and developer tooling.
- Repo workflow and safety rules: AGENTS.md
- Package usage: packages/*/README.md
- Package workflows: packages/*/AGENTS.md
- Release history: packages/*/CHANGELOG.md
- Node.js >= 20.3
- Yarn 1.22.22 (classic)
- PostgreSQL for DB-backed packages and tests
- Optional: MSSQL for node-knex MSSQL coverage tests
- Install dependencies
yarn- Build all packages
yarn build- Set environment variables as needed
cp .env.example .env- For DB-backed tests, prepare the local test database (destructive)
yarn db:prepare# build and typecheck
yarn build
yarn tsc
# lint and format
yarn lint
yarn fmt
# tests
yarn test
yarn test:package <folder>
yarn verify
# database tasks (node-knex)
yarn db:prepare- @touchbistro/danger-plugin - standard DangerJS PR checks for CI
- @touchbistro/eslint-config - base ESLint config for Node services
- @touchbistro/eslint-config-react - ESLint config for React apps
- @touchbistro/jobseeker - Postgres-backed recurring job scheduler
- @touchbistro/json-schema-formats - AJV JSON Schema format extensions
- @touchbistro/node-aws-s3-client - AWS S3 client wrapper with optional mock
- @touchbistro/node-aws-sqs-client - AWS SQS client wrapper with mock and metrics hooks
- @touchbistro/node-common - shared utilities and re-export facade
- @touchbistro/node-data-files - structured data file read/write
- @touchbistro/node-express - standard Express middleware
- @touchbistro/node-jwt-cli - JWT and JWK CLI utilities
- @touchbistro/node-knex - Knex utilities and maintenance tasks
- @touchbistro/node-locale - locale parsing and negotiation utilities
- @touchbistro/node-message-sender - message sender framework
- @touchbistro/node-redis - Redis and Valkey config bootstrap
- @touchbistro/node-tasks - task tooling facade on node-knex
- @touchbistro/node-workflow - workflow engine core
- @touchbistro/react-feature-flags - React feature flag providers
- Follow conventional commits; commitlint is enforced in CI.
- Update .env.example when adding new environment variables.
- Keep changes focused and update package docs when behavior or APIs change.
For full contribution workflow, see AGENTS.md.
In order to keep a changelog this repo implements a check for commit messages to adhere to conventional commits format https://www.conventionalcommits.org/en/v1.0.0/
The following is a guideline showing examples of commit messages that satisfy commitlint rules for all cases of version updates.
NOTE: Commit message subjects; right-hand side of the colon have to start with an uppercase character.
feat(special-lib): Major breaking changes header
BREAKING CHANGE: Description about the breaking change
feat(special-lib): Minor version bump header
fix(special-lib): Patch small things header
chore(special-lib): Chore work header
The workflow for working on and automatically publishing packages:
- Branch off of master and do your changes (making sure commit messages adhere to format)
- Push and check the finished CI job for the canary package tags

- Use the canary package tags to test your dependent services locally (add it to the package.json and test locally)
- Once satisfied, merge into master and any changed packages will automatically be published with the version number in the package.json. Versions will be incremented based on conventional commit changelogs.