Contentful Personalization & Analytics
    Preparing search index...

    Module @contentful/optimization-node - v0.0.0

    Contentful ContentfulOptimization Node SDK.

    Adds Node-specific defaults via the ContentfulOptimization class. Core and transitive API exports are available from dedicated entrypoints: @contentful/optimization-node/core-sdk, @contentful/optimization-node/api-client, and @contentful/optimization-node/api-schemas.

    Contentful Logo

    Contentful Personalization & Analytics

    Optimization Node SDK

    Guides · Reference · Contributing

    Warning

    The Optimization SDK Suite is pre-release (alpha). Breaking changes may be published at any time.

    The Optimization Node SDK implements functionality specific to Node environments, based on the Optimization Core Library. This SDK is part of the Contentful Optimization SDK Suite.

    Table of Contents

    Install using an NPM-compatible package manager, pnpm for example:

    pnpm install @contentful/optimization-node
    

    Import the Optimization class; both CJS and ESM module systems are supported, ESM preferred:

    import ContentfulOptimization from '@contentful/optimization-node'
    

    Configure and initialize the Optimization Node SDK:

    const optimization = new ContentfulOptimization({ clientId: 'abc123' })
    

    The package-local dev harness runs from packages/node/node-sdk/dev/ and reads .env from this package directory.

    1. Start from .env.example and create or update packages/node/node-sdk/.env.

    2. Prefer the repo-standard PUBLIC_... variable names shown in .env.example.

    3. Start the harness from the repo root:

      pnpm --filter @contentful/optimization-node dev
      

    Reference implementations illustrate how the SDK may be used under common scenarios, as well as select less-common scenarios, with the most basic example solution possible.

    • Node SSR Only: Example application that uses the Node SDK to render an optimized Web page
    • Node SSR + Web Vanilla: Example application demonstrating simple profile synchronization between the Node and Web SDKs via cookie
    Option Required? Default Description
    api No See "API Options" Unified configuration for the Experience API and Insights API endpoints
    app No undefined The application definition used to attribute events to a specific consumer app
    clientId Yes N/A Shared API key for Experience API and Insights API requests
    environment No 'main' The environment identifier
    eventBuilder No See "Event Builder Options" Event builder configuration (channel/library metadata, etc.)
    fetchOptions No See "Fetch Options" Configuration for Fetch timeout and retry functionality
    logLevel No 'error' Minimum log level for the default console sink
    Option Required? Default Description
    experienceBaseUrl No 'https://experience.ninetailed.co/' Base URL for the Experience API
    insightsBaseUrl No 'https://ingest.insights.ninetailed.co/' Base URL for the Insights API
    beaconHandler No undefined Custom handler used to enqueue Insights API event batches
    enabledFeatures No ['ip-enrichment', 'location'] Enabled features the Experience API may use for each request
    ip No undefined IP address override used by the Experience API for location analysis
    locale No 'en-US' (in API) Locale used to translate location.city and location.country
    plainText No false Sends performance-critical Experience API endpoints in plain text
    preflight No false Instructs the Experience API to aggregate a new profile state but not store it

    Configuration method signatures:

    • beaconHandler: (url: string | URL, data: BatchInsightsEventArray) => boolean

    Event builder options should only be supplied when building an SDK on top of the Optimization Node SDK or any of its descendent SDKs.

    Option Required? Default Description
    channel No 'server' The channel that identifies where events originate from (e.g. 'web', 'mobile')
    library No { name: '@contentful/optimization-node', version: '0.0.0' } The client library metadata that is attached to all events

    Fetch options allow for configuration of a Fetch API-compatible fetch method and the retry/timeout logic integrated into the SDK's bundled API clients. Specify the fetchMethod when the host application environment does not offer a fetch method that is compatible with the standard Fetch API in its global scope.

    Option Required? Default Description
    fetchMethod No undefined Signature of a fetch method used by the API clients
    intervalTimeout No 0 Delay (in milliseconds) between retry attempts
    onFailedAttempt No undefined Callback invoked whenever a retry attempt fails
    onRequestTimeout No undefined Callback invoked when a request exceeds the configured timeout
    requestTimeout No 3000 Maximum time (in milliseconds) to wait for a response before aborting
    retries No 1 Maximum number of retry attempts

    Configuration method signatures:

    • fetchMethod: (url: string | URL, init: RequestInit) => Promise<Response>
    • onFailedAttempt and onRequestTimeout: (options: FetchMethodCallbackOptions) => void

    Arguments marked with an asterisk (*) are always required.

    Get the specified Custom Flag's value from the provided changes array.

    Arguments:

    • name*: The name/key of the Custom Flag
    • changes: Changes array

    Returns:

    • The resolved value for the specified Custom Flag, or undefined if it cannot be found.

    Behavior notes:

    • Node SDK is stateless; getFlag(...) does not auto-emit trackFlagView.
    • If full map resolution is needed for advanced use cases, use optimization.flagsResolver.resolve(changes).
    Note

    If the changes argument is omitted, the method will return undefined.

    Resolve a baseline Contentful entry to an optimized variant using the provided selected optimizations.

    Type arguments:

    • S: Entry skeleton type
    • M: Chain modifiers
    • L: Locale code

    Arguments:

    • entry*: The baseline entry to resolve
    • selectedOptimizations: Selected optimizations

    Returns:

    • The resolved optimized entry variant, or the supplied baseline entry if baseline is the selected variant or a variant cannot be found.
    Note

    If the selectedOptimizations argument is omitted, the method will return the baseline entry.

    Resolve a "Merge Tag" to a value based on the provided profile. A "Merge Tag" is a special Rich Text fragment supported by Contentful that specifies a profile data member to be injected into the Rich Text when rendered.

    Arguments:

    • embeddedNodeEntryTarget*: The merge tag entry node to resolve
    • profile: The user profile
    Note

    If the profile argument is omitted, the method will return the merge tag's fallback value.

    Only the following methods may return an OptimizationData object:

    • identify
    • page
    • screen
    • track
    • trackView (when payload.sticky is true)

    trackClick, trackHover, and trackFlagView return no data. When returned, OptimizationData contains:

    • changes: Currently used for Custom Flags
    • selectedOptimizations: Selected optimizations for the profile
    • profile: Profile associated with the evaluated events

    Identify the current profile/visitor to associate traits with a profile.

    Arguments:

    • payload*: Identify event builder arguments object, including an optional profile property with a PartialProfile value that requires only an id

    Record an Experience API page view.

    Arguments:

    • payload*: Page view event builder arguments object, including an optional profile property with a PartialProfile value that requires only an id

    Record an Experience API screen view.

    Arguments:

    • payload*: Screen view event builder arguments object, including an optional profile property with a PartialProfile value that requires only an id

    Record an Experience API custom track event.

    Arguments:

    • payload*: Track event builder arguments object, including an optional profile property with a PartialProfile value that requires only an id

    Record an Insights API entry view event. When the payload marks the entry as "sticky", an additional Experience API entry view is recorded. This method only returns OptimizationData when the entry is marked as "sticky".

    Arguments:

    • payload*: Entry view event builder arguments object, including an optional profile property with a PartialProfile value that requires only an id

    Record an Insights API entry click event.

    Returns:

    • void

    Arguments:

    • payload*: Entry click event builder arguments object

    Record an Insights API entry hover event.

    Returns:

    • void

    Arguments:

    • payload*: Entry hover event builder arguments object

    Track a feature flag view via the Insights API. This is functionally the same as a non-sticky flag view event.

    Returns:

    • void

    Arguments:

    • payload*: Flag view event builder arguments object

    Interceptors may be used to read and/or modify data flowing through the Core SDK.

    • event: Intercepts an event's data before it is queued and/or emitted
    • state: Intercepts state data retrieved from an Experience API call before updating the SDK's internal state

    Example interceptor usage:

    optimization.interceptors.event((event) => {
    event.properties.timestamp = new Date().toISOString()
    })
    Warning

    Interceptors are intended to enable low-level interoperability and should be used with care.

    Classes

    default

    Interfaces

    OptimizationNodeConfig

    Variables

    OPTIMIZATION_NODE_SDK_NAME
    OPTIMIZATION_NODE_SDK_VERSION