Library API

Purpose: Use demo-maker from TypeScript instead of the CLI.

Package entry: @a1knowhow/demo-maker (see src/index.ts).

import {
  loadScenario,
  runScenario,
  createDemoLogger,
  createRegexUrlCapture,
  type RunContext,
} from "@a1knowhow/demo-maker";

const scenario = loadScenario("./scenarios/demo.yaml", { cwd: process.cwd() });

const context: RunContext = {
  auth: {
    email: process.env.E2E_TEST_USER_EMAIL ?? "",
    password: process.env.E2E_TEST_USER_PASSWORD ?? "",
  },
  // Prefer explicit keys or an env file — avoid spreading all of process.env
  variables: {
    BASE_URL: scenario.base_url,
    ...(process.env.DEMO_WORKSPACE1
      ? { DEMO_WORKSPACE1: process.env.DEMO_WORKSPACE1 }
      : {}),
  },
};

const result = await runScenario(scenario, context, {
  logger: createDemoLogger("info"),
  headless: true,
  cwd: process.cwd(),
  urlCaptureHooks: [
    createRegexUrlCapture([
      { variable: "workspace_id", pattern: String.raw`/workspace/([^/]+)` },
    ]),
  ],
});

if (!result.success) {
  throw new Error(result.error);
}

Useful exports

Export Role
loadScenario / parseScenario YAML → scenario
runScenario / runScenarioOnExistingPage Execute
sliceScenarioByEndStep Truncate steps
resolveVariables {{ }} helper
formatYouTubeChapters Timing → chapter text
createRegexUrlCapture / buildUrlCaptureHooks URL → variable capture
Types DemoScenario, DemoStep, Locator, RunContext, UrlCaptureRule, …

Options highlights

RunScenarioOptions: logger, headless, cwd, storageStatePath, saveStorageStatePath, failFast, endStep, pauseAtEnd, debugDir, urlCaptureHooks.

Relative paths in YAML (video.dir, file uploads) resolve against cwd (default process.cwd()).