npm.io
0.35.0 • Published 12h ago

@commonpub/config

Licence
AGPL-3.0-or-later
Version
0.35.0
Deps
1
Size
105 kB
Vulns
0
Weekly
0
Stars
3

@commonpub/config

Configuration factory and validation for CommonPub instances.

Overview

Every CommonPub instance has a commonpub.config.ts file that defines its identity, feature flags, and auth settings. defineCommonPubConfig() validates configuration at startup, applies defaults, and surfaces warnings about risky combinations.

Installation

pnpm add @commonpub/config

Usage

// commonpub.config.ts
import { defineCommonPubConfig } from '@commonpub/config';

const { config, warnings } = defineCommonPubConfig({
  instance: {
    domain: 'hack.build',
    name: 'hack.build',
    description: 'A maker community for hardware hackers',
    contactEmail: 'admin@hack.build',
    maxUploadSize: 10 * 1024 * 1024, // 10MB
    contentTypes: ['project', 'blog', 'explainer'],
  },
  features: {
    content: true,
    social: true,
    hubs: true,
    docs: true,
    video: true,
    contests: false,
    learning: true,
    explainers: true,
    federation: false,
    admin: false,
  },
  auth: {
    emailPassword: true,
    magicLink: false,
    passkeys: false,
    github: {
      clientId: process.env.GITHUB_CLIENT_ID!,
      clientSecret: process.env.GITHUB_CLIENT_SECRET!,
    },
  },
});

Feature Flags

All features are gated behind flags (CLAUDE.md rule #2). No feature code runs unless its flag is true. New flags MUST also be declared in runtimeConfig.public.features in apps/reference/nuxt.config.ts — env-var overrides only propagate to declared keys (feedback-nuxt-env-only-declared-keys).

Flag Default Controls
content true Content CRUD, publishing, slugs
social true Likes, comments, follows, bookmarks
hubs true Hub system (community / product / company types)
docs true Documentation module (CodeMirror, versioning, search)
video true Video content type
contests false Contest / competition system + judging workflow
events false Events (listing, RSVP, calendar)
learning true Learning paths, enrollment, progress, certificates
explainers true Interactive explainer modules
federation false ActivityPub federation (push + pull). Requires CPUB_FED_TOKEN_KEY env
seamlessFederation false Display mirrored content alongside local content in browse / search / feed
federateHubs false Hub federation via AP Group actors
editorial false Editorial curation (staff picks, content categories, homepage editorial)
admin false Admin panel (user mgmt, reports, settings, theme editor, layouts)
emailNotifications false Email delivery for notifications (instant + digest)
publicApi false Admin-provisioned public Read API at /api/public/v1/* (no keys created by flag flip; provision via /admin/api-keys)
contentImport true URL content import — operator off-switch for the remote-fetch surface
layoutEngine false Layout engine — <LayoutSlot> reads from layouts/layout_rows/layout_sections (migration 0005). Flip OFF if migration not applied — empty pages otherwise. Editor lives at /admin/layouts
identity sub-flags

Identity features ship behind a nested object so the rollout can ratchet phase-by-phase. CPUB_FED_TOKEN_KEY env var MUST be set before flipping any phase to true (otherwise the runtime guards on each surface refuse to deploy).

Sub-flag Phase Controls
linkRemoteAccounts 1 Users can link a remote Mastodon-API account (read-only)
signInWithRemote 2 New users can sign up by signing in via a remote instance
actingAs 3 "Acting as" identity-context switcher + banner
remoteInteract 4a Like / comment / follow via a linked identity (low blast radius)
remotePublish 4b Publish via a linked identity (highest blast radius — last to flip)

Auth Configuration

Option Type Description
emailPassword boolean Email/password sign-up and sign-in
magicLink boolean Passwordless magic link auth
passkeys boolean WebAuthn/passkey support
github object? GitHub OAuth { clientId, clientSecret }
google object? Google OAuth { clientId, clientSecret }
sharedAuthDb string? Shared auth DB connection string (Model C)
trustedInstances string[]? Trusted instance domains for AP Actor SSO

Warnings

defineCommonPubConfig() returns warnings for risky configurations:

  • Shared auth DB: warns about database-level coupling between instances
  • Federation without trusted instances: AP Actor SSO requires at least one
  • Learning without explainers: explainers are a first-class lesson type

Exports

// Factory
export { defineCommonPubConfig } from './config';

// Types
export type { CommonPubConfig, FeatureFlags, AuthConfig, InstanceConfig } from './types';

// Zod schemas (for custom validation)
export { configSchema, featureFlagsSchema, authConfigSchema, instanceConfigSchema } from './schema';

Development

pnpm build        # Compile TypeScript
pnpm test         # Run 23 tests
pnpm typecheck    # Type-check without emitting

Dependencies

  • zod: Schema validation

Keywords