Evari

update: Release v3.0.3

This release contains a number of bug fixes, alongside updates and extensions to existing configuration options to support client implementations.

New Features

Customisable messaging for remove modals

A new property is now available for PAGE_ARRAY question configurations, enabling customisation of the confirmation modal shown when a user removes an item.

This allows you to provide context-specific messaging to clearly communicate the implications of the action, helping users make more informed decisions.

To implement this, add the configuration within the styles object, an example is included below. Referencing ${title} in your text property will pull through the name of your PAGE_ARRAY which can be dynamically set using the pageLabelTopic property.

If the custom configuration is not specified, the system will continue to use the default messaging.

"confirmDeletePageModal": {
    "cancelText": "Keep Property",
    "submitText": "Remove Property",
    "text": "Removing ${title} will exclude it from your insurance coverage
and may change your quote. Are you sure you want to continue?", "title": "Remove Property" }


Filter aggregator lists by team

Team-based filtering is now supported for aggregator lists, enabling more targeted views and improved list management.

To enable this, a secure property can be added to the aggregator configuration to index items by teamId - an example is included below.

If your configuration's targetSubjects events already include the attribute property, no additional changes are required. If not, you may need to update or create a stream event configuration to support it. For example, this could be a collation that creates a stream event with the attribute when a form attribute is upserted.

"secure": [
    {
        "index": "$.event.body.attribute.teamId"
    }
],
"body": { "body": { "attribute": "$.event.body.attribute" }, "topic": "$.lookup.topic" }

Generate a dynamic URL within _BUTTON type configurations

The configuration options for SINGLE_USE_BUTTON and MULTI_USE_BUTTON question types have been extended to support dynamic variables within the url property. This means you can now embed contextual, form-related information directly into the button’s destination URL, enabling more personalised and dynamic navigation experiences.

Included below are the available variables that can be referenced, along with an example configuration. When referencing variables, be sure to wrap them in double curly brackets - for example: {{formTopic}}. You can also use jPath expressions interchangeably with the $ notation, meaning both {{form.topic}} and {{$.form.topic}} are valid and function the same way.

// available variables
{ "formTopic": "d90a05b4-ca8f-4057-a6da-2966527d9f3f", "formSubject": "FRM_MY_QUOTE", "productId": "e7784280-cdd0-4800-8e28-6089eb771adb", "answers": { // some answers... }, "form": { "topic": "d90a05b4-ca8f-4057-a6da-2966527d9f3f", "subject": "FRM_MY_QUOTE" } }
// example configuration
{ "answerType": "MULTI_USE_BUTTON", "answerConfig": { "redirectTarget": "_self", "redirectUrl": "https://admin.cloudstream.evari.tech/form/{{formTopic}}?
pid={{productId}}&intkey={{formSubject}}&isPublic=false", "text": "Submit and Return to Quote" }, "internalKey": "MY_REDIRECT_BUTTON", "isVisible": true }

Support for document sub-templates

Document domain now supports sub-templates, allowing users to break down large, complex documents into manageable segments for easier organisation and ongoing maintenance.

Each segment can be created as a separate template using the builder portal. Once all templates are prepared, you should open the primary template (representing the first segment) in the builder and use the 'Subordinate Templates' dropdown to select and link the remaining segment templates in the correct order. When compiled, the primary and subordinate templates are merged into a complete, structured document.

update
  • Extended Question Builder to support the new showIsTouched property, allowing it to be easily toggled between true and false per question configuration.

  • Form configuration now supports properties to disable the comments and user collaboration features, reducing the number of requests made to the backend.

  • _text values are now generated for PILL_SELECTION_API question types to support rule-based logic that relies on the human-readable labels rather than the raw value identifiers.

  • Added support for setting custom Content-Type headers in the Collation API provider. Automatically encodes data when application/x-www-form-urlencoded is used.

bugfix
  • Allow generation of payment links when an invoice is in an Overdue status

  • Fix for issue in form-clone where rules were running inconsistently

  • Display an asterisk when DATA_LIST question is set to "isRequired": true

  • Support "below" helpText on YES_NO question

  • Fix for issue where the inline render editor displayed behind the form contents

  • Fix for issue in teams management where sequential updates to team details led to the incorrect display of details

  • When a new team is created, special characters are now sanitised from the generated topic

  • Extend multi-select components to delimit options by characters other than commas

  • Ensure backbone events have an offset

  • Fix for helpText icon dropping to new line on question labels

bugfix: V3.0.2

This release contains a range of bugfixes due to a number of new client implementations. 

What's Changed

Stop running rules when a user interacts with a question

An new property can now be added to the question config "showIsTouched" : true. When this property is added, every time the user answers the question on the UI, there will be an extra value saved in the answers - {{questionTopic}}_isTouched : true.

This new value can then be used in a rule as a fact to stop the rule from running again automatically.

Input1 payment integration

For US based clients, the Input1 payment provider is now supported as a payment gateway. The integration also includes passing additional metadata to Input1 for display in their billing dashboard, and a payment flow that includes a payment link rather than a hosted Evari page.

Bugfix

  • Add padding to collapsed render nodes so that containers aren't directly next to each other
  • Ensure the new quote function works when the button is clicked from the sidebar
  • Restrict the document signing UI to only show the signature card for docs that require a signature
  • Fix blank dropdown on render node builder when selecting from question list
  • Remove the limit of 100 items being returned when requesting a list of all question topics
  • When updating rules via the frontend UIs, ensure only the diff is updated to stop thousands of function invocations due to updating all rules in the ruleset.
  • Fix for the index and item delete commands on aggregator
  • Ensure aggregator configs can't be updated to remove the topic, stopping the aggregator list from working
  • Fix an issue with a large number of stream connections being instantiated at the same time, causing some connections to fail
  • Allow the pill selection component to remove the value when there is only a single option selected, even if the field is required.
  • Fix for API questions not reloading options with dynamic filters from rules without refresh
  • Increase the document template upload limit to 3mb to allow for large docx template files
  • Update the table component to stop displaying rows in a table that are false
  • Remove the scrollbar from the table display on windows and linux.
  • Update to permissions for showing the comments icon in the top toolbar when the user has the "read-comments" permissions
  • Stop the toolbar overlapping content and blocking interaction with the screen next to the toolbar
  • Don't validate all arrays when set to "isRequired": false which improves performance in the UI by stopping the validation running on all array data
  • Stop issues when the word "team" is included in the team name
  • Add feature flag for hellosign re-assign
  • Bugfix for embedded iframe form display
  • Stop the UI from showing an error message on successful invoice/escrow payment
  • Create single header for table group
  • Improved batch ingestion handling

 

Release v3.0.1

feature: Release v3.0.1

Highlights

This release contains a number of new features and improvements to configuration management and components, as well as some enhancements to the underlying platform for improved performance.

New Feature

  • Form sharing - A new function can now be used to share forms with users. When sharing occurs, the form that is shared will be available on the customer dashboard when the user logs in so it can be accessed and collaborated on. To enable form sharing, the permission must be added to the appropriate user roles.

Configuration management

  • Release management - The ability to create releases, group changes together into a release and migrate configuration between environments
  • Global rule and collection management - Rule builders have been updated to allow for rule and collection management and changes.
  • Update sidebar/breadcrumbs - Improved user interface for the sidebar and added breadcrumbs for easier navigation

Platform enhancements

  • Enhanced scaling - When large loads are put through containers (for example when quotes are being imported), new containers are automatically created as needed and the load is balanced between the available containers.
  • Improved snapshotting - The snapshot stores for the form and snapshot services have been moved away from DynamoDB to using the Evari MicroStrate Store. The event store is still using DynamoDB
  • Improve API rule performance - Rule configurations are now in an in memory cache, significantly reducing the time to retrieve rule configs before being able to execute the rules. In our benchmarking tests, we saw improvements of up to 400ms

What's Changed

Form Sharing

A sharing button has been added into forms which will be visible for users that have the new "Enable Sharing" permission. When the "Enable Sharing" permission is added into a role, the user will have to log out and in again for the permission to apply. It may also take up to 2 hours to apply due to permission caching.

Once sharing is enabled, a new button will be available when viewing a form which will show that sharing controls. To share with someone, an email address needs to be entered followed by either a comma or the enter key. 

For a user to be able to access the form, they need to have an account within the environment. If they are already a user, the checkbox doesn't need to be clicked, however if an account is needed, ticking the checkbox will automatically create a new public user within the environment. New users will not have passwords set, so will be required to login with the email code or magic link login options. Already having a user and clicking the checkbox will not cause any issues with the users account.

For a user to be notified of the sharing action and to be able to access the shared data, two pieces of configuration need to be added:

  1. Form display preferences for cards need to be added to the form configuration that is being shared
  2. A new email notification needs to be set up, triggered off the sharing action for that specific form

Configuration Release Management

All configuration changes are now detected and tracked through a centralised list of all changes that occur within a single environment.

To access release management, the user will need to be in a profile that has access to the "Releases" tab within the builder. If this isn't available to your profiles, reach out to the Evari team to ensure you have access.

From the Releases tab, new releases can be created, and previous releases can be viewed. For each release, configuration changes can be added to or removed from the release. There is also the ability to filter the configuration changes by configuration topic, author, or commit summary.

 

Environments can be created within release management to move configuration between environments. When adding a new environment, a baseUrl is required which will normally be similar to `https://api.yourEnvironment.evari.tech`. Environments can also have string replacements configured by default which allows these to be applied to all configurations moving to that environment. String replacements are useful if you are changing predictable values, for example environment URLs, or replacing something like _TEST with _QA automatically.

 

To push your release to other environments, select the "publish release" action which will allow you to select the environment you wish to release to, and will also require you to authenticate against that environment. 

 

Global rule and collection management

Creating and editing Rule Sets using the rule builder
  1. Select the form you would like to add the Rule Set to from the dropdown
  2. Click on the "Manage Rule Set" dropdown and select "Enter value..."
  3. Type the name of the Rule Set you would like to create
  4. A "Rules management" dropdown will show. Expand this to show a list of all the rules you can add to your new Rule Set and select the rules you would like to add by clicking the checkbox. Be sure to wait until the checkbox is updated to make sure the rule is added to the new Rule Set
  5. To add your new Rule Set to the form, refresh the rule builder and select the form you would like to add it to from the dropdown and then select your new ruleset from the "Frontend Rulesets" and "Backend Rulesets" dropdowns, or both.

Creating and editing Rule Sets using the form configuration editor
  1. Open the form config through the settings cog on the toolbar
  2. Within the rulesContext, add in the rule set name to either frontendRuleSets, ruleSets, or both. This can be an existing rule set, or a new one you would like to create and save the configuration.
  3. Click the wand icon in the toolbar to open the rule editor. The rule set you just added should now show. New rule sets will show as {} whilst existing rule sets will show the rules that have been added to the rule set.
  4. To add a new rule to a rule set, you can add it directly in the JSON editor and click the save button, or you can open the builder by clicking the tool icon.
  5. A "Rules management" dropdown will show. Expand this to show a list of all the rules you can add to your new Rule Set and select the rules you would like to add by clicking the checkbox. Be sure to wait until the checkbox is updated to make sure the rule is added to the new Rule Set

 

Creating and editing Rules

Rules can be directly added or edited in the JSON editor. When a rule is added or changed, clicking the save button will update that rule and save it as an individual rule that can be used in multiple rulesets.

You can also create rules using the rule builder.

  1. Navigate to the rule builder, or click the tool icon when editing rule sets within the form configuration editor tools.
  2. To update an existing rule, click the "Rule" dropdown and select your existing rule from the list.
  3. To create a new rule, click the "Create New Rule" button
  4. Inside the "Property Name" field, add the rule reference you would like, followed by . and the property to operate on (e.g. .value, .markdown)
  5. Write your rule using the "Expression Editor" or JSON "Rule Editor" and do any testing you would like
  6. Clicking save will create the new rule and update the collection with the new rule if you selected a form and ruleset or are in the form configuration editor

feature
  • API requests can now be included in script tags which will execute when the form component is loaded. 

    This allows for embed forms to automatically upsert answer values without having to include query string parameters.

    const upsertAnswerMessage = { type: 'websocket', params: { command: 'upsert-answer', subject: '$QUESTION/ANSWER', topic: '{{formTopic}}/{{questionTopic}}', body: { value: '{{yourValue}}' } } };

  • New sidebar and breadcrumb included within the applications.

  • Customise validation error messages

    1. Сustomise on the form level. These messages will be applied to all questions on this form.

    You need to add the property questionsContext.validationMessages to the form config

    form config example:

    All message properties are optional so that you can specify only some of them, whilst the others will use the default value.

    2. Customise messages specifically for a specific question (you can customise the messages for questions in the Question Builder or directly in the JSON)

    The messages specified in the question configuration will take precedence over the message properties in the form config

update
  • Increase the base lambda size of all functions to 2048mb to improve cold start performance

  • A new permission has been added to allow external API users to only trigger specific integration configs that have EXT_ within their topic

  • Style customisation for CARD_GROUP question types. You can use the attached JSON properties, or use the question builder UI to apply the styles.

  • New rule engine operators added to compare values against values that exist in lists

    isSubset - will return true when the first set is a subset of the second set. e.g. [1,2], [1,2,3]

    isNotSubset - should return true when the first set is a subset of the second set e.g. [1,4], [1,2,3]

    setDifference - the lists of all the elements that are in set A but that are not present in set B e.g. [1,2,3], [2,3,4] = 1

    setIntersection - the list of elements that are both in set A and set B e.g. [1,2,3], [2,3,4] = [2,3]

    setUnion - the list of elements that are either in set A or in set B e.g. [1,2,3], [2,3,4] = [1,2,3,4]

bugfix
  • Fix for intermittent issue with some requests using the wrong base URL

  • Fix for some markdown hyperlinks being displayed as white text

  • Fix for form and contract list pagination

  • Fix for document signing error loop when the signer isn't specified correctly

  • Fix for errors overlapping with the "below" help text type

  • Fix for an intermittent function timeout on the Question and Cron event store stream when under heavy load

  • Fix for Chrome prefill overlapping with question labels

  • Fix for multiple array questions displaying on the same page

  • Fix for adding help text to card groups

  • Fix for adding a list column text align property

  • Fix for date picker crashes when manual value entered outside of the date picker range

feature: Release v3.0.0

Highlights

This major release replaces provides a significant upgrade to the Evari Data Backbone by replacing the AWS Kinesis streaming infrastructure with Evari’s own MicroStrate Streams. This provides improved performance and reliability compared to AWS Kinesis service which has some well documented limitations, including potential issues with shard congestion and partitioning constraints that could cause back pressure resulting in slowdowns when the system came under sudden load.

This release updates the services that comprise the Evari CloudStream platform, removing the dependency on AWS Kinesis, as well as other necessary service changes to ensure backwards compatibility is maintained with the existing platform functionality.

Performance will be noticeably improved, particularly in relation to receiving backend updates through to the UI as soon as the updates are available. A new collaboration feature has also been added in order to take advantage of the performance enhancements delivered by Evari MicroStrate Streams.

 

What's Changed

Replace Kinesis with Evari MicroStrate Streams

MicroStrate Streams is a highly performant, highly available and resilient write ahead log and streaming service that not only replaces Kinesis as the primary streaming technology powering the data backbone underpinning the Evari platform, but also provides an enhanced feature set and reduced infrastructure management overhead.

The main benefits of this change will be experienced by users through the notable increase in speed of all functions of the platform. This is because all our services communicate via stream, so with improved stream performance and throughput comes and increase in the overall speed of the platform.

Reliability has also been improved through improvements in message delivery and acknowledgment over Kinesis, as well as the removal of shard congestion as a possible reason for message delivery slowdowns.

Improved resiliency and burst load performance through server clusters

In order to reduce the impact of documented issues with AWS Lambda function cold starts, we previously implemented an enhancement that we call “The Kraken” to virtualise all lambda functions into a container and execute functions until capacity was hit, at which point requests would be offloaded to lambda again.

With the implementation of the Evari MicroStrate Streams, throughput has been greatly increased, which results in greater load being placed on the other services in a shorter amount of time. To compensate for this, the Evari MicroStrate Mesh implementation enables the balancing and scaling of load across multiple instances of “The Kraken” service. This upgrade is capable of exceeding both the performance of AWS Lambda and the account capacity limit imposed by AWS on concurrent lambda function executions.

Evari MicroStrate Orca

This updates the way Evari function lifecycles are developed and executed in order to improve performance and reliability. Orca ensures that:

  • All events against a particular subject and topic will be processed in order.
  • All generated facts will be stored before the processing of the next event is executed.
  • All data points will be retrieved ahead of time making the execution of the function pure (there are exceptions if side effects are introduced).

Through this technology, requests for different resources are able to execute in parallel, whilst requests for the same resources benefit from guaranteed global order. Because the functions are now pure with no service connections, the function execution overheads are reduced dramatically. Three services within the CloudStream platform have been updated to utilise this technology:

  • Payments
  • Rules
  • Cron (Scheduler)

Cursor collaboration

Due to the live nature of the Evari backend services and the speed at which updates are shared between connected devices that now benefit from using the MicroStrate streams; we have developed an entirely new feature that allows people to observe who is viewing a form, and where their cursor is on that form in realtime. This tool is useful for customer service agents or team members who might be looking at the same form and following what the other users are doing.

Rule sets

To allow for better re-usability of the configuration of rules, rule sets has been developed to replace the current form rules implementation.

Rule sets allow global rules to be set, and then collections of these rules to be created and added into any number of forms. They also assist with separating rules for specific functional areas such as e.g. underwriting rules, pricing rules, visibility rules.

Forms will be migrated to use rulesets when this release is deployed to the target environment. Rules will no longer be accessible through the for config, but you will still be able to update your rules through form updates.

The rulesets in use on a form will be referenced inside of “rulesContext”

  • “ruleSets” will be executed on the backend
  • “frontendRuleSets” will be executed in the UI
  • Referencing the rule set in both places will result in rules being run on the frontend and backend.

update: Release v2.2.0 - Node.js Version Update

Highlights

This release updates the Node.js version of all our Lambda Functions to Node 20. This change also updates the serverless version in use to v3, and the AWS SDK version to v3. 

As well as updating our functions to a newer runtime, this change also results in performance improvements due to a reduction in the bundle size of functions which makes them faster to load and execute. 

This release also contains a number of bug fixes and improvements

What's Changed

  • Backend functions upgraded to Node 20 runtime
  • Resolved an issue with rebuilt aggregatates not filtering in the correct order
  • Updated the security policies for the comments feature
  • Resolved an issue where a read only calendar can be clicked by selecting the icon
  • Added the ability to hide the delete and move buttons on the PAGE_ARRAY component
  • Updated the upload policies to allow xlsx files
  • Added a 'header:key-value` property which can be used to reference header values withing HTTP requests as part of a security policy
  • Resolved some styling issue resulting in default colours or white buttons that were hard to read

bugfix: Release v2.1.4

This release contains various bug fixes and improvements.

  • Resolved an issue making date filters on tables unable to be selected
  • Resolved an issue with retrieving public tokens on embedded forms
  • Resolved an intermittent issue that failed to create a form when being redirected within the admin portal
  • Fixed display issues of some elements
  • Added commit message dialogue when using the inline render editors
  • Improve the inactivity notification by adding an I’m still here" button
  • Resolved an issue where no 404 was displayed if a contract was being requested which didn’t exist
  • Resolved an issue with pagination, filtering and searching on aggregator tables
  • Resolved an issue breaking the listing of aggregator configs due to an invalid reference
  • Resolved an issue with team listing that prevented the rows from being clicked
  • Resolved an issue with product updates that was overriding all data on the product rather than merging the data with the previous state
  • Added support for multiple different fields to request data from the same data mapper file on the same page
  • Added support for the DropBox Sign signature re-assignment function
  • Added the fontSize property to the single/multi use buttons
  • Resolved an issue with aggregator rebuilds not correctly sorting the list by time

update: Release v2.1.3

This release contains various bug fixes and enhancements.

Highlights

Aggregator updates

A number of changes have been made to the aggregator to support more dynamic event consumption and responses. These changes include adding support for target paths, adding static and dynamic subjects into the configuration to create new indexes and improved aggregator rebuild efficiency.

  • Target Paths - this provides support for listening for specific subject/topic combinations, making aggregation more targeted.
  • Aggregator subjects - can be added within the body as a static subject, or in the lookup as a dynamic JPath subject.
  • Query config - a flexible way to create new read models from aggregated data that can be subscribed to by frontends and clients.

 

UI Theme Updates

The dynamic UI theming has been refactored to resolve a number of bugs with custom themes that are present on forms persisting even when changing to a new form with a different theme. There has also been a new notifications UI added which updates the messages you will see when you are having network issues, as well as success and error messages.

Edge Content Caching

Caching has been updated to try and resolve an intermittent error seen in the Australian AWS edge regions where MFEs are unable to be retrieved from the CloudFront edge cache. This update adds in modified cache control and TTL values.

feature
  • Aggregator Target Paths - As well as `targetSubject` support that is already provided, aggregator configurations can now support an array of targetPaths. The paths have to be either an exact match, or a glob pattern with either a single wildcard * which will match only that path, or a double wildcard ** which will match all paths after it.

  • Aggregator subjects

    Before, subjects of aggregates were the same as the config topic but with a "$" in front.

    Now we can set a different predefined subject in config.body or a dynamic subject in config.body.lookup that supports jPath.

    Just like before, each different subject corresponds to a different opensearch index. If a subject was redefined in config, the opensearch query request should have a topic which is the same as the new subject but without the "$". Also, items have to be deleted by the new subject

    Note that if both are used, the lookup.subject will overwrite the static subject

  • Query Config - the query config can be used to create read models of data already in the system and is capable of pushing out subscriptions to this data is it changes. For example, if you have events for ORGANIZATION as below, you are able to create a new list of this data that will be available through whatever has been specified in the `egressConfig`.

    {
     "command": "upsert",
     "subject": "$BACKBONE/CONFIG_QUERY/DRAFT",
     "topic": "ORG_LIST",
     "body": {
     "type": "query-config-upserted",
     "egressConfig": {
     "subject": "$EVARI/ORG",
     "topic": "$.event.topic"
     },
     "queries": [
     {
     "searchTerm": "$.event.topic",
     "size": 1,
     "exact": true,
     "from": 0,
     "transformType": "SEARCH",
     "fields": [
     "topic"
     ],
     "keepDelimitersIntact": true,
     "aggregateConfigTopic": "ORGANIZATION"
     }
     ]
     }
    }

update
  • A new operator has been added in the rule engine to resolve a rounding error with large decimal place values. The `toFixed` operator can be used to ensure correct rounding to the right number of decimal places even beyond the 16-bit floating point format. New operators include subtractBig, divideBig, multiplyBig, addBig, toFixed

    "toFixed_example": {
     "value": {
     "input": [
     "@fact:item1.value",
     2
     ],
     "operator": "toFixed"
     }
    }

bugfix
  • Fix bug with radio buttons changing sizes with text length

  • Resolved and issue with the “PAGE” node type loading correctly in builder tools

  • Fixed bugs related to custom theming of forms persisting when changing forms

  • Resolved an issue with nested array rules resolving without the array ID in specific circumstances

bugfix: Release v2.1.2

This is a patch release that contains a number of smaller bugfixes to support performance and stability, internal updates to support new environment provisioning, and some small feature updates. 

Highlights

Label markdown links

You can now add markdown links to labels on all question types. The default behaviour is to open the link in a new tab, but this can be changed through the dropdown that will appear when a link is added. Links must be added using markdown which will be automatically created by clicking the link icon. Once added, the link will be available on the question preview to ensure the behaviour is correct.

Array filter rule

A new rule operator has been added which outputs a filtered list of items that match the filter rule which can then be used in dropdowns/markdown etc.

{ "value": { "input": [ "@fact:parent.value", { "input": [ "@fact:parent/*/child.value", "option 1" ], "operator": "hasOptions" } ], "operator": "array-filter" } }

The first input is the parent list of items, and the second input is the filter rule you want to apply on each item of the array. At the moment, this rule only supports hasOptions inside the array-filter. Please reach out to us if this need to be extended to other operators.

Enable caches

The websocket cache can be enabled in the global auth configuration (if the user has the "manage authentication config" permission) to improve loading speed of question and render configurations. The cache will quickly serve the cached version when requested, and the cache will be refreshed when an update to a cached configuration is received. When enabled, there is a small delay (~10 seconds) between when the publish occurs and the cached version being available.

update
  • Links can now be added via markdown on the question builder. When a link is added, a dropdown will appear so that the user can select the desired target (current tab or new tab). If no dropdown appears, the default behaviour is to open the link in a new tab.

  • The websocket cache can be enabled by adding the below into the global auth configuration which will improve the load times of configurations being retrieved from websockets.

    "tokenMetadata": { "enableSocketCache": true }

  • The domain url has been removed from the accessToken and refreshToken local storage to make it easier to use the application on customer domains and embedded flows.

  • New array-filter operator has been added to the rule service which outputs a filtered list of items that match the filter rule

bugfix
  • Change the datamapper API calls to go via websockets to allow a large number of requests without getting rate limited and resolved a bug which shared the same query result across a number of different datamapper requests using the same file.

  • Resolved a bug with AREA question type, increasing the maximum allowable textAreaHeight so that a lot of text can be displayed without being cut off

  • Resolved a bug which caused the question builder to crash when a new question is created

  • Updated the frontends to clear out the local storage if either the accessToken or refreshToken have expired to ensure the user is logged out when they no longer have valid tokens

  • A bug has been fixed with the lambda host which allows it to be enabled again to increase response times on all lambda functions

bugfix: Release v2.1.1

This is a patch release that contains a number of small bugfixes and updates, as well as a new consensus mechanism to solve an underlying issue with AWS kinesis streams ceasing the delivery of data to a connected consumer.

Highlight

The main change in this release is to address some performance issues/flaws observed with the AWS Kinesis infrastructure upon which Evari CloudStream depends. There is an issue with reliably delivering data over an extended period of time. This is an inherent limitation with consuming Kinesis streams, and from our testing, appears to happen whenever the stream is being consumed by one particular consumer over a longer period of time, and does not appear to occur if using lambda to consume events (each lambda invocation is a new connection rather than something long lived). The lambda approach however is not viable as there is a large performance impact on message delivery increasing to 5-10 seconds per message. 

To address these issues, we are releasing a patch which includes a new consensus mechanism implemented to significantly reduce the likelihood of data not being delivered to connected subscribers when it is written to the kinesis streams. This mechanism works in the following way:

  1. 7 consumers all pulling the same data off the streams.
  2. A consensus mechanism then compares each message retrieved to verify the same thing has been received by more than 1 consumer
  3. If any consumer fails the consensus check, it is destroyed, and a new consumer created in its place
  4. If in the very unlikely event that 6 consumers were to fail at the same time so that nothing is able to reach consensus, then as new consumers are added and consensus regained, the data processing will recommence from the last successful message.
feature
  • Extend the DROPDOWN_API component to allow for the dynamic querying of datamapper files within the question configuration. This feature enables subscription to answer streams when dictated within the configuration, and allows queries to re-run as the subscribed streams update. As a result dynamic querying is more efficient, with faster response times and simplified maintenance.

    When providing the lookup data which specifies the dynamic data to be used for the query, we can now include dynQuestion: true which will enable this feature.

    "lookupData": {
     "cover_start_date": "cover_start_date",
     "dynQuestion": true
    },
update
  • Increase the instance count on the OpenSearch cluster to increase performance and fault tolerance.

  • Sync worker and layer version with the git release tag

  • Remove Icon property has been added to the ARRAY_TABLE component

  • New properties `createdBy` and `createdByUserId` have been added to public form creation, restricting public forms to only being able to be accessed by the token that created them, or agents/administrators. Ensure Public Token expiry time is set to a suitable value to ensure public users have enough time to claim ownership over a form before the token expires.

bugfix
  • Bugfix for managing the data state when multiple tables are toggled on the same screen, ensuring the right data is displayed

  • Bugfix for resetting style themes when switching between different form themes

  • Bugfix for decisions when local computer times are not correct.

    This fixes an issue which resulted in the wrong decisions being calculated due to the local computer time of the user either being faster or slower than the server time. When this happens, the resulting decisions can be out of order due to comparing the time of the decision.

    When the connection is established, we send the server time to the frontend to use on all decisions, and we continually send server times to the frontend to ensure the clock doesn't drift and the date is not tampered with.

  • Bugfix to ensure the access token is properly applied to all requests after the token is refreshed

  • Bugfix for listing transactions not correctly displaying on the UI

  • Default obfuscation has been disabled on public tokens/requests to ensure SSO can complete successfully

  • Improve event de-duplication on the form domain

    • Remove's authorizer metadata from the events before processing to reduce message size
    • Only de-dupes on eventId if present and takes the latest by offset

update: Release v2.1.0

This Release contains a large number of stability fixes across the platform:

  • Improved handling on the data, session, and token management within the browser, resulting in increased stability and performance
  • Improved stability due to improvements in the networking between Kinesis shards and containers, particularly in relation to handling large event sizes.
  • A number of other bugfixes, stability, and performance improvements

Feature Highlights

Evari SDK v2.1.0

The new Evari SDK brings in a number of improvements to browser data management and performance of updates within the UI, and improved handling of offline updates when users are experiencing connection issues.

Session management has been updated with alerts being shown for the following scenarios:

  • offline browsers will show a disconnected message
  • reconnection message when a connection is re-established
  • inactive sessions approaching the timeout value set in the global authentication configuration
  • An unstable connection message when the Evari gateway cannot be reached or a stable connection can't be established

Request obfuscation can be enabled to obscure all network and websocket requests, making it more difficult for attackers to understand how the application functions in order to attempt to find and exploit attack vectors. By default, all public requests are obfuscated before login. Once a user is logged in, obfuscation is controlled by a property that can be set in the global authenticate config `obfuscate: true/false`.

Support trace hotkey `ctrl + shift + Q` - Using these keys will collect all information within the session and notify the Evari team that a debug log has been submitted.

Improved stream management within the browser improving request speed, memory usage, and performance

State management improvements for improved consistency between frontend, backend, and offline updates

UI for Building Aggregator Configurations

Aggregator configs allow for dynamic data aggregation based on listening for events and combining these events into a snapshot for the user to retrieve the information that they want. 

A UI has been created to allow for easier configuration, and gives the ability to preview the tables and customise the display of data fields within the tables. 

Note: only JSON objects are supported at this time, so the excel upload and JSON upload are not functional buttons.

Aggregator Builder UI
feature
  • Evari SDK v2.1.0 - The Evari SDK bring a number of new features to the frontend as well as improvements in stability and performance

  • Aggregator builder to create and manage aggregate configurations. The following route needs to be added to the user profile manifest to view the aggregator builder menu option.

    {
     "icon": "Dashboard",
     "path": "/builder/aggregator",
     "label": "Aggregator",
     "authenticatedRoute": true,
     "showInNavigation": true
    },
update
  • Improved processing speed and reliability with aggregation and rebuilding.

  • Support for handling natural arrays and blank cells when exporting aggregated results to CSV

  • Added support for multi-upsert, multi-poison-pill, and multi-tombstone on the backbone event functions

  • Improved the publishing of security rule updates, making them available to the UI faster

bugfix
  • Fixes to event writing reliability

    • Improved handling of retires when a batch write to stream fails
    • Prevents errors from occurring when there are event clashes with the same primary and sort key and ensures events are correctly written
    • Stops the original event time being overwritten in some circumstances when saving the event
  • Authentication Issues

    • Fix a bug when using the "unset" command to ensure unwanted properties on the configuration can be removed
    • Ensure an error message is displayed when SSO login fails
    • Fix issue with new password token validation when using an expired token to set a new password
  • Networking Fixes and Improvements

    • Module sockets now ping/pong with subscription internally to keep the connection alive rather than having to re-open the connection
    • Better handling for error streams
    • Added duplicate log/remove on form event saving. This will prevent "streams stopping processing" and unhandled errors.
    • Fixes where aggregator processes (fanout, dispatch) were duplicated per worker thread, now only processes on master for this.
    • Improvements to speed and stability across all high utilisation containers with container replication
    • Remove the root cause for a segmentation fault error occurring
    • Fixes Kinesis shard pausing processing with larger payloads
  • Stop some (debounce) collations not running if the debounceOn or orderOn keys aren't specified correctly

  • Increase the clone form function timeout for larger datasets

  • Fix an issue with the render-multi-upsert function

  • Fix an issue with labels displaying in the question summary component

  • Ensure rules that rely on navigation events are triggered when the navigation setting RENDER_VALIDATE_CURRENT_PAGE_AND_NAVIGATE is active

  • Don't create a new profile when the legacy field "internalKey" is missing on profile update

  • Increase number of instances on OpenSearch for better redundancy