# Configuration

### Sources

**Introduction**: Sources define where the data is coming from. Each Profiler will generally need to get the source data from somewhere. Sources allow you to gather that data. Common sources include metatags, cookies and url parameters.

**Interface**: Each source has its own fields which defines how it needs to be configured. Each Source will return an array of values which can then be used by Processors in the next step.

**Definition**: Source definitions ship with the Convivial Profiler Builder project.github morpht convivial profiler builder definitions source.yaml

#### Plugins

**cookie**

Fetches a value from cookies based on the source name and adds it to the values array if found.

**get**

Performs an asynchronous HTTP GET request to fetch data from a specified resource URL and adds the response to the values array.

**httpuseragent**

Determines the device type (mobile or desktop) from the user agent string and adds it to the values array.

**meta**

Collects content from \<meta> tags matching a specified attribute name and adds each content piece to the values array.

**query**

Extracts values from URL query parameters matching the specified source parameter and adds them to the values array.

**time**

Adds the current time component (hour, minute, or second) specified in the source to the values array.

**acceptlang**

Adds the browser's language setting to the values array, or defaults to "en-AU" if the browser language is not set or does not include a region.

#### Processors

Processors take source data and does something with that data. In the simplest case the data can be copied into a store. In more advanced cases, the data may be transformed or used as an input into some function.

Definition: Source definitions ship with the Convivial Profiler Builder project.

github morpht convivial profiler builder definitions source.yaml

**accumulation**

Increments a value within an accumulator based on the input values.

**dimension**

Adjusts dimension values, optionally normalizing them across the input values.

**extreme\_geoip**

Stores geographic information with an expiration time based on input values.

**language\_full**

Stores the full language information from input values with an expiration time.

**language\_simple**

Stores a simplified language code from input values with an expiration time.

**map**

Maps input values to stored values based on predefined mappings, with fallback and default values.

**pageview**

Logs page views and/or increments a counter based on the processor's configuration.

**searchquery**

Tracks search queries based on URL parameters, logging and incrementing counters for&#x20;

unique searches.

**store**

Stores values with an expiration time, with support for permanent storage by setting a specific TTL.

**unstore\_value**

Removes a stored value based on matching input values and temporarily stores a specified value.

**temp**

Stores values temporarily in the profiler's temporary storage.

#### Destinations

After the processing in a Profiler has been concluded, the data is generally published out to a destination such as local storage or possibly a cookie. This is the final step, where the user profile is defined by pulling across data from the storage area of the Convivial profiler.

Definition: Source definitions ship with the Convivial Profiler Builder project.

github morpht convivial profiler builder definitions source.yaml

**bestpick**

Selects the best value based on a set of criteria from local storage and optionally stores it in local storage or cookies.

**copy**

Copies a value identified by a storage key to either local storage or cookies, with an option to stringify the value.

**flag**

Stores a flag value in local storage or cookies, prefixed or suffixed as defined.

**formfiller**

Auto-fills form fields with data from local storage or cookies based on configurations.

**formtracker**

Attaches an event listener to a form to track submissions and push data to the dataLayer.

**officehours**

Determines if the current time falls within configured office hours and stores the result in local storage or cookies.

**range**

Categorises a numeric value into predefined ranges and stores the result in local storage or cookies.

**season**

Determines the current season based on a predefined value and stores it in local storage or cookies.

**set**

Sets a specified value in local storage or cookies to '1'.

**threshold**

Stores data in local storage or cookies if it exceeds a certain threshold.

**top**

Identifies and stores the top value from a dimension in local storage or cookies.

**unset**

Unsets a specified value in local storage or cookies by setting it to '0'.

**datalayer\_event**

Pushes events to the dataLayer for analytics purposes, using the values parameter to create multiple events if necessary.

**remove**

Removes data from local storage or cookies based on a set of criteria.

### Extending Convivial Profiler

Convivial Profiler has been built to be an extensible system making it possible to implement your own Source, Processor and Destination plugins. This allows you to extend the codebase as needed to suit your own needs.
