elbwalker

understanding-destinations

@elbwalker/understanding-destinations
elbwalker
309
16 forks
Updated 1/6/2026
View on GitHub

Use when working with destinations, understanding the destination interface, or learning about env pattern and configuration. Covers interface, lifecycle, env mocking, and paths.

Installation

$skills install @elbwalker/understanding-destinations
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Pathskills/understanding-destinations/SKILL.md
Branchmain
Scoped Name@elbwalker/understanding-destinations

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

skills list

Skill Instructions


name: understanding-destinations description: Use when working with destinations, understanding the destination interface, or learning about env pattern and configuration. Covers interface, lifecycle, env mocking, and paths.

Understanding walkerOS Destinations

Overview

Destinations receive processed events from the collector and deliver them to third-party tools (analytics, marketing, data warehouses).

Core principle: Destinations transform and deliver. They don't capture or process—that's sources and collector.

Destination Interface

See packages/core/src/types/destination.ts for canonical interface.

MethodPurposeRequired
init(context)Load scripts, authenticateOptional
push(event, context)Transform and send eventRequired
pushBatch(batch, context)Batch processingOptional
configSettings, mapping, consentRequired

The env Pattern

Destinations use dependency injection via env for external APIs. This enables testing without mocking.

// Destination defines its env type
export interface Env extends DestinationWeb.Env {
  window: {
    gtag: Gtag.Gtag;
    dataLayer: unknown[];
  };
}

// Destination uses env, not globals
async function push(event, context) {
  const { env } = context;
  env.window.gtag('event', mappedName, mappedData);
}

Testing with env

REQUIRED SKILL: See testing-strategy for full testing patterns.

import { mockEnv } from '@walkeros/core';
import { examples } from '../dev';

const calls: Array<{ path: string[]; args: unknown[] }> = [];
const testEnv = mockEnv(examples.env.push, (path, args) => {
  calls.push({ path, args });
});

await destination.push(event, { ...context, env: testEnv });

expect(calls).toContainEqual({
  path: ['window', 'gtag'],
  args: ['event', 'purchase', expect.any(Object)],
});

Destination Config

config: {
  settings: { /* destination-specific */ },
  mapping: { /* event transformation rules */ },
  data: { /* global data mapping */ },
  consent: { /* required consent states */ },
  policy: { /* processing rules */ },
  queue: boolean,  // queue events
  dryRun: boolean, // test mode
}

Destination Paths

TypePathExamples
Webpackages/web/destinations/gtag, meta, api, piwikpro, plausible
Serverpackages/server/destinations/aws, gcp, meta

Template Destination

Use as starting point: packages/web/destinations/plausible/

Related

Skills:

Source Files:

Package READMEs:

Documentation: