Skip to main content

Create Your Own Source

A source captures events from an environment (browser, server, third-party API) and forwards them to the walkerOS collector.

The source interface

Sources are async functions that receive a context object and return a source instance:

Loading...

The context contains:

Loading...

The returned instance must implement:

Loading...

Types bundle

Sources use a Types interface to bundle all TypeScript types:

Loading...

The 4 type parameters:

  1. Settings: Source configuration options
  2. Mapping: Event mapping (usually never for sources)
  3. Push: External push signature (what source.push exposes)
  4. Env: Internal dependencies (what source calls via env.elb)

Context destructuring

The context parameter contains everything your source needs:

Loading...

The collector provides env.push (formerly env.elb). You provide other dependencies (like window, document, custom APIs) when configuring the source.

Minimal example

Loading...

Complete example: Event API source

Capturing events from a third-party API with event listeners:

Loading...

Using your source

Loading...

Testing your source

Test Utilities

Loading...

Test Example

Loading...

Common patterns

Polling for API Readiness

When the external API isn't immediately available:

Loading...

Source as adapter pattern

Sources bridge external systems and the collector:

External System  ←→  Source (Adapter)  ←→  Collector

Two interfaces:

  1. External (source.push): Platform-specific signature

    • Browser: push(elem, data, options) → Returns Promise<PushResult>
    • Server: push(req, res) → Returns Promise<void> (writes HTTP response)
    • Your choice: Match your environment's needs
  2. Internal (env.elb): Standard collector interface

    • Always Elb.Fn - same across all sources
    • Sources translate external inputs → standard events → env.elb(event)

Example signatures:

Loading...

The Push type parameter defines what your source exposes externally. Internally, all sources use env.elb to forward to the collector.

Key concepts

  • Context pattern: Sources receive a single context object with config, env, logger, id
  • Validate custom dependencies: Only check optional env properties your source needs
  • Types bundle: Use 4-parameter pattern for full type safety
  • Adapter pattern: External push adapts to environment, internal env.push stays standard
  • Cleanup: Implement destroy() to remove listeners
  • Stateless: Let collector manage state

Next steps

💡 Need Professional Support?
Need professional support with your walkerOS implementation? Check out our services.