
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
Online customers can abandon their shopping cart for many reasons. As a store owner with access to Google Analytics there is information available about some of the reasons.
FunnelQL provides a solution to help customers complete their order. Pro-active communication, smart tricks with the design etc. Everything is possible with FunnelQL.
There is much to do about 'cart abandonment'. Experts estimate that 2 to 4 trillion USD per year is lost by abandoned shopping carts.
www.annexcloud.com/blog/31-shopping-cart-abandonment-statistics-for-2018/
FunnelQL can be an ideal solution and can help webshops recover more than a trillion USD in lost revenue.
This project is available for acquisition. Contact us at info@pagespeed.pro when interested.
A javascript library for working with Funnel Query Language. The library enables to perform queries on the chronological context of activity of a website visitor for the purpose of Conversion Funnel Optimization.
The language and library are intended to be easy to use to unlock Conversion Funnel Optimization for users with in-depth insights into visitors/customers such as webshop owners and internet marketing specialists.
The package is available on NPM: npm install funnelql.
Include the library in the HTML document. The library requires a Web Worker that can be included as a inline blob or that will require a separate web worker file.
<script src="/funnelql.js" async></script>
The script will automatically load /funnelql-worker.js on the basis of the path of the funnelql.js file. You can define a custom location via window['funnelql-worker'] = 'path/to/funnelql-worker.js';.
<script src="/funnelql+inline-worker.js" async></script>
To save additional bytes you can use the .nodebug.js version of each script that does not include debug and performance timing functionality.
Working with Funnel Query Language consists of two parts:
Funnel Query Language is based on a IndexedDB database that can persist or expire with the browser session. Persistence enables to target returning visitors or visitors that visited on a specific day or time.
$FQL.init({
expire: 'session'
});
| Option | Description | Default |
|---|---|---|
expire | Database expiration. | session (could be never or a time in seconds) |
The Funnel data-set is based on tags that can be set with the following method:
$FQL.tag('tag-name');
During navigation, URLs are automatically registered. The following method can be used to manually register a navigation:
$FQL.nav('URL or path/');
The following method can be used to perform a query based on a Funnel Query string or JSON:
$FQL.query( "funnel query" ).then(function(result) {
// result = true/false (boolean)
});
The following method can be used to parse a Funnel Query string into JSON:
$FQL.parse( "funnel query" ).then(function(json) {
// json
});
The following method can be used to perform an action as soon as a Funnel Query string or JSON matches the path of the visitor:
$FQL.on( "funnel query" ).then(function(result) {
// result = true
});
Alternatively, the on method accepts a callback instead of a promise and multiple queries as a Array.
$FQL.on( [ "funnel query 1", "funnel query 2" ], function(result, fql) {
// result = true
// fql = funnel query string
});
The library can provide detailed debug information including Performance API timings in the browser console. The following method can be used to enable debug mode or to retrieve it's status.
$FQL.debug(true);

How to construct a Funnel Query?
Funnel Query Language provides several methods for querying the registered funnel data-set.
URL)PATH)COUNT)SINCE)FN)A tag can be queried using a JSON string "tag-name" or using a Regular Expression method REGEX(/tag-name/i).
"tag-x" + REGEX(/tag-name-(\d+)?/i) + "tag-y"
An URL can be queried using the method URL("url") or using a Regular Expression URL( REGEX(/tag-name/i) ).
URL("url/to/match") + URL( REGEX(/url\.(html|js|css)/i) )
The PATH query enables to add chronological context to a query. The path method starts a sub query that can contain a tag, url, count or function query.
The path query provides operators to define the chronological context. The path sequence can be based on URL navigation position or time.
| Option | Description |
|---|---|
> | Matches in consecutive query should follow previous query's URL position. |
>= | Matches in consecutive query should match or follow previous query's URL position. |
|> | Matches in consecutive query should be on same URL position as previous query's URL position. |
>10 | Matches in consecutive query should be at least 10 URL positions from previous query's URL position. |
>10m | Matches in consecutive query should be at least 10 minutes from previous query's event position. |
<10m | Matches in consecutive query should be within 10 minutes from previous query's event position. |
PATH( "tag-x" > "tag-y" )
The following example matches when tag-y follows within 1 minute after tag-x.
PATH( "tag-x" <1m "tag-y" )
The following example matches when the visitor visits an URL containing cart or other-page within 5 navigations after having visited product-1.html.
PATH( URL("product-1.html") <5 URL( REGEX(/(cart|other-page)/) ) )
The SINCE query enables to add chronological context to a query. The since method starts a sub query that can contain a tag, url, count or function query.
The first parameter of the SINCE method can contain a time reference, e.g. 1s (1 second) or 10m (10 minutes) or a date in format yyyy-MM-ddThh:mm.
SINCE( 1m, "tag-x" )
SINCE( 2018-09-02T12:10, ( "tag-x" + "tag-y" ) )
A COUNT query enables to query based on number of occurrences of a tag.
The first parameter of the COUNT method contains the tag as JSON string or as REGEX query. The query supports the operators >, <, =, <=, >= followed by a number.
COUNT( "tag-x" > 1 )
A FN query enables to perform a custom query using a javascript function. Optional conditions from a parent query are added as a extra argument.
FN( "function-name", "argument-1", "argument-2" )
FAQs
FunnelQL: Funnel Query Language Library
We found that funnelql demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.