Skip to main content

Local Dev Setup

:::info Source Sourced from services/content-service/LOCAL_DEV_SETUP.md in the documentation repo. :::

1. Prerequisites

Node 20, pnpm 9, Docker 24.

2. Quick Start

cd services/content-service
cp .env.example .env.local
pnpm install
docker compose -f docker-compose.dev.yml up -d
pnpm db:migrate
pnpm kms:init # generates dev signing keypair in localstack
pnpm seed
pnpm dev # API on :3080
pnpm dev:builder # Package builder worker
pnpm dev:bundler # Bundle worker

3. Dependencies

ServicePortPurpose
postgres5432Schema content
redis6379Job queues (BullMQ)
nats4222Events
minio9000S3 emulator
localstack4566KMS emulator
authoring-service (mock)3010Draft snapshots
catalog-service (mock)3070CourseVersion registration
sync-service (mock)3090Bundle delta projection
clamav3310AV scanning for SCORM imports

4. Environment

PORT=3080
LOG_LEVEL=debug
ENV=dev

DATABASE_URL=postgres://content:content@localhost:5432/content
REDIS_URL=redis://localhost:6379/20
NATS_URL=nats://localhost:4222
NATS_STREAM=CONTENT

S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=minioadmin
S3_BUCKET_PACKAGES=content-packages-dev
S3_BUCKET_BUNDLES=content-bundles-dev
S3_BUCKET_EXPORTS=content-exports-dev

KMS_ENDPOINT=http://localhost:4566
KMS_TENANT_SIGNING_KEY_PREFIX=alias/ghasi-content-signer-

BUNDLE_LICENSE_DEFAULT_TTL_DAYS=30
SCORM_IMPORT_MAX_MB=500
BUILD_TIMEOUT_MS=900000

CLAMAV_HOST=localhost
CLAMAV_PORT=3310

5. Seed Data

  • Creates 2 published PlayPackages (ACME onboarding, Globex safety) for pilot tenants.
  • Creates 4 pre-built bundles for seeded devices from identity-service.
  • Seeds a SCORM 1.2 fixture course (fixtures/scorm12-golden.zip) for import testing.

6. Useful Commands

pnpm dev
pnpm test
pnpm test:integration
pnpm test:scorm:conformance # runs against SCORM Cloud test suite (requires token)
pnpm test:e2e:offline # mount → play → revoke flow
pnpm bundle:verify <bundleId> # CLI to decrypt + verify bundle locally
pnpm package:inspect <pkgId>
pnpm saga:trace <sagaId>
pnpm openapi:check

7. Fixtures

fixtures/ contains:

  • scorm12-golden.zip — valid SCORM 1.2 course (ADL fixture).
  • scorm2004-golden.zip — valid SCORM 2004 4th ed.
  • scorm-malicious-rce.zip — expected to quarantine (security test fixture).
  • scorm-path-traversal.zip — expected reject.
  • play-package-expected.json — golden package for snapshot tests.

8. Debugging

  • pnpm saga:trace <sagaId> shows publish-saga state transitions.
  • pnpm bundle:decrypt <bundleId> --device <deviceId> — decrypts locally for inspection.
  • MinIO UI at http://localhost:9001.
  • NATS dashboard at http://localhost:8222.