Getting started
Prerequisites
- Node.js 24 (matches
serverless.ymlruntime) - AWS CLI with profiles
AbstractPlayDevandAbstractPlayProdin~/.aws/credentials - Access to the
@abstractplayGitHub Packages scope
Install and build
npm install
npm run build
npm run build runs ESLint and TypeScript (tsc). To compile only:
npm run build-ts
GitHub Packages
Private packages require a .npmrc:
@abstractplay:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=<PAT with read:packages>
CI creates this from the PAT_READ_PACKAGES secret (see .github/workflows/deploy-dev.js.yml).
Local gameslib development
To test against a local rules engine build:
npm install /path/to/gameslib.tgz
Or point at a packed tarball from a gameslib checkout.
Environment variables
Lambda env vars are set in serverless.yml. Secrets are injected in CI from GitHub Actions secrets:
| Variable | Purpose |
|---|---|
TOTP_KEY |
Organizer TOTP validation |
VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY |
Web push |
OPENSSH_PRIVATE_KEY |
Some maintenance/crypto paths |
TEST_BOT_CLIENT_ID / TEST_BOT_CLIENT_SECRET |
Dev reference bot (dev only) |
Do not commit secret values. Names only are listed here.
Dev reference bot
The testBot Lambda is enabled on the dev stage only. Full protocol documentation is in the header of api/testBot.ts. See Bots.
Project layout
api/ Main Lambda handlers (abstractplay.ts, sockets/, testBot.ts)
lib/ Shared libraries (bots, DDB, WebSocket broadcast)
utils/ Scheduled jobs (yourturn, bot-outbound consumer)
locales/ i18n strings for emails and push notifications
serverless.yml Infrastructure and function definitions